Memprogram Database SQLite3 di PHP

SQLite adalah engine database yang paling banyak dipakai, digunakan di setiap smartphone dan di banyak komputer, dibundel dibanyak aplikasi yang digunakan sehari-hari. Meski aplikasi server seperti PHP lebih mengandalkan database server seperti MySQL atau PostgreSQL, SQLite dapat menjadi pilihan tepat untuk aplikasi yang berjalan di server tunggal dan membutuhkan engine database yang ringan.

SQLite3 adalah SQLite versi 3, peningkatan dari versi sebelumnya 2.8. Saat tulisan ini dibuat, rilis terakhir SQLite3 yang dapat dipakai adalah versi 3.29.0

Instalasi Modul dan Klien

Sebelum menggunakan SQLite di PHP, lakukan pemasangan modul sqlite3 dengan perintah berikut:

 $ sudo apt install php-sqlite3

Jika membangun aplikasi PHP di windows, pastikan ekstensi sqlite3 diaktifkan, berikut baris kode di php.ini untuk mengaktifkan ekstensi sqlite3:

...
;extension=sockets
extension=sqlite3
;extension=tidy
...

Instal pula aplikasi klien untuk dapat bekerja menggunakan SQLite, seperti membuat database baru dan mengatur bentuk tabel. Di Linux, aplikasi klien dapat diinstal dengan perintah berikut:

sudo apt install sqlite3

Aplikasi klien untuk sistem operasi lain bisa diunduh melalui: https://www.sqlite.org/download.html.

Alternatif selain aplikasi klien berbasis baris perintah / CLI, aplikasi klien SQLite juga terdapat antarmuka berbasis grafis / GUI, salah satunya adalah SQLite Browser yang dapat diunduh melalui https://sqlitebrowser.org/

Continue reading “Memprogram Database SQLite3 di PHP”

Komputer Kecil Edukasi micro:bit

Didesain untuk tujuan edukasi, micro:bit adalah komputer kecil yang dapat diprogram, membuat kamu dapat berkreasi dengan teknologi digital. Perangkat ini dikembangkan dengan tujuan untuk belajar dan mengajarkan kode komputer menjadi lebih mudah dan menyenangkan. Mendorong anak-anak untuk terlibat dalam memprogram komputer, elektronik dan pembuatan perangkat secara umum.

Di negara asalnya, BBC memberikan sampai dengan 10 juta perangkat micro:bit secara cuma-cuma kepada anak-anak usia 11 dan 12 tahun di Inggris. Bagian dari program “BBC Make It Digital” sebagai upaya untuk mengantisipasi “kesenjangan keterampilan” dalam pertumbuhan ekonomi digital negara itu. Untuk adopsi ke suluruh dunia, BBC menyerahkan micro:bit ke tangan Microbit Education Foundation, dan kini micro:bit sudah tersedia secara komersial, termasuk sudah dijual di marketplace Indonesia.

Bentuk Fisik micro:bit

Dengan ukuran fisik berukuran setengah kartu kredit, tampilan depan micro:bit dilengkapi dengan display berupa 25 LED beserta 2 tombol kiri dan kanan yang dapat dikonfigurasi.

tampilan depan micro:bit (sumber: microbit:org)

Di dalamnya terdapat akselerometer untuk deteksi gerakan dan mengetahui kapan melakukan gerak. Tertanam kompas untuk mengetahui ke arah mana yang dituju. Terdapat pula bluetooth dan berbagai koneksi untuk menghubungkannya ke lebih banyak sensor.

tampilan belakang micro:bit (sumber: microbit.org)

Memprogram micro:bit

Ada dua editor yang digunakan untuk mengkode micro:bit, yaitu MakeCode Editor dan Python Editor. MakeCode Editor memprogram secara visual dalam bentuk blok-blok (drag-and-drop blocks) dan kode ditulis dalam bahasa pemprograman JavaScript. Sedangkan dengan Python Editor dapat menulis kode menggunakan bahasa pemprograman populer Python.

MakeCode Editor dapat digunakan dengan mengunjungi alamat https://makecode.microbit.org, lalu buat project baru dengan mengklik “+ new project”. Pilih “Basic”, kemudian “Show string” untuk menampilkan kata / kalimat yang akan muncul di layar LED. Seret dan jatuhkan di blok “Forever” agar kata / kalimat tersebut muncul terus menerus, dan masukkan kalimat “HALO, TEMAN!”. Tambahkan “Show Icon” untuk menampilkan gambar-gambar seperti icon hati, tempatkan di bagian bawah “Show String”.

Klik icon “Play” untuk menjalankan kode langsung di editor, dan klik “Download” untuk memasukkan program ke dalam micro:bit. File yang didownload mempunyai ekstensi .hex (misalkan microbit.hex), file yang berisikan program ini nantinya akan berjalan di atas micro:bit.

Hubungkan micro:bit ke komputer dengan menggunakan kabel USB. Di komputer, micro:bit akan dikenali sebagai USB Drive dengan label “MICROBIT”. Salin file .hex tersebut ke USB Drive MICROBIT, di Windows bisa dilakukan juga dengan cara “Send To→MICROBIT”

Untuk memprogram menggunakan Python Editor dapat dilakukan dengan mengunjungi alamat https://python.microbit.org. Tuliskan kode-kode Python di dalam editor, dan klik tombol “Download” untuk memasukkan ke dalam micro:bit.

mikro:bit akan berhenti sebentar dan LED kuning di belakang akan berkedip saat kode diprogram. Setelah selesai kode akan berjalan secara otomatis!

Hal keren apa yang akan kamu buat? micro:bit dapat merespons tombol, cahaya, gerakan, dan suhu. Perangkat ini bahkan dapat mengirim pesan secara nirkabel ke mikro:bit lain menggunakan fitur ‘Radio’ loh!

Untuk pengajar, kamu bisa menggunakan micro:bit untuk mengajar di sekolah dengan sumber daya yang bisa diperoleh di https://microbit.org/teach/

Brave Rewards dan Basic Attention Token (BAT)

Sampai saat ini, iklan masih menjadi salah satu cara yang dilakukan pembuat konten internet untuk mendapatkan pemasukan dengan memberikan konten gratis pada pengunjung. Tapi kini ada cara lain untuk memberikan penghargaan / rewards saat kamu browsing di internet.

Perkenalkan Brave Rewards

Peramban Brave mempunyai cara baru memberikan penghargaan / rewards saat berselancar di internet dalam bentuk Basic Attention Token atau disingkat BAT. Rewards bukan hanya diberikan kepada pembuat konten, melainkan juga kepada pungunjung konten. BAT diberikan kepada pembuat konten sebagai kontribusi dan BAT didapatkan pula ketika kita melihat iklan pribadi di Brave.

Instalasi peramban Brave baru dan mengaktifkan Brave Rewards

Apa itu Basic Attention Tokens?

Brave Rewards dibangun di atas Basic Attention Token (BAT), cara baru untuk menghargai atensi, menghubungkan pengguna, pembuat konten, dan pengiklan.

BAT adalah token yang berjalan di blockchain Ethereum. Ekosistem BAT melingkupi Brave, sebuah browser / peramban web yang fokus pada privasi pengguna dirancang untuk menangkal tracker dan malware. Di dalamnya memanfaatkan teknologi blockchain untuk secara anonim melacak perhatian pengguna secara aman dan memberi penghargaan kepada pembuat konten.

Mengaktifkan Brave Rewards

Pengguna Brave dapat mengaktifkan fitur Rewards melalui icon “Brave Rewards” yang terdapat di kanan bar address. Cara lain dapat dilakukan dengan memilih “Brave Rewards” dari bar menu yang ada di kanan atas.

Ketika fitur ini aktif, kamu mempunyai dompet yang berisikan jumlah BAT yang dimiliki, persentase atensi dari website / konten yang kamu kunjungi dan memberikan tip kepada pembuat konten.

Fitur Brave Rewards yang sudah diaktifkan.

Kontribusi Otomatis

Brave melakukan kalkulasi atensi pada setiap website / konten yang dikunjungi pengguna. Dari atensi tersebut, pengguna dapat memberikan kontribusi dengan memberikan token BAT sebagai reward kepada pembuat konten.

Kontribusi kepada pembuat konten dapat diberikan secara otomatis dengan fitur Auto-Contribute. Pengaturan fitur ini dapat dilakukan dari Rewards Setting. Atur berapa jumlah BAT yang ingin dikontribusikan, konten mana saja yang ingin diberi kontribusi BAT, dan pengaturan atensi lainnya.

Pengaturan kontribusi otomatis.

Memberi Tip

Selain kontribusi otomatis, pengguna juga dapat memberikan kontribusi BAT langsung ke penyedia konten dengan memberikan tip. Pilih icon Brave Reward yang terdapat di samping bar address, lalu klik “Send a tip ..”, berikan jumlah BAT yang ingin diberikan kepada pembuat konten.

Mengirimkan tip ke website (sebelah kiri) dan tip langsung di setiap tweet di Twitter (sebelah kanan)

Iklan Pribadi

Iklan pribadi memberikan kesempatan pengguna untuk mendapatkan BAT setiap kali melihat iklan. Jumlah iklan yang ingin dilihat dapat dikontrol, dan mendapatkan 70% dari pendapatan iklan yang diterima dari pengiklan. Sebagai imbalan atas atensi yang diberikan, pengguna akan mengakumulasi BAT saat browsing konten.

Fitur Ads di Brave Rewards yang telah diaktifkan.

Bagaimana Mendapatkan token BAT?

Sesuai tujuan BAT untuk menghargai atensi serta menghubungkan pengguna, pembuat konten dan pengiklan, token BAT dapat diperoleh dengan beberapa cara:

Pemberian token gratis

Brave memberikan token BAT gratis kepada pengguna yang telah menginstal dan rutin menggunakan peramban Brave. Token gratis ini dapat diberikan ke pembuat konten sebagai atensi dan kontribusi.

Klaim token BAT gratis!
Melihat iklan pribadi

Selain memberikan token gratis, pengguna Brave juga bisa mendapatkan BAT dengan melihat iklan pribadi di browser. Kamu akan mendapatkan 70% dari pendapatan iklan yang diterima dari pengiklan.

Iklan Brave muncul pada notifikasi ponsel
Menjadi content creator / pembuat konten

Jika kamu memiliki website, channel Youtube atau akun Twitter, kamu bisa mendaftar sebagai Creator dan mendapatkan penghasilan dalam bentuk token BAT. Setiap pengunjung dapat memberikan atensi, kontribusi dan tip kepada pembuat konten melalui konten yang mereka kunjungi.

Token BAT yang akan diterima content creator
Beli BAT di exchange

Token BAT telah banyak tersedia di exhange atau pertukaran aset digital, baik exchange global maupun lokal. Binance sebagai exchange global bisa dijadikan tempat untuk mendapatkan token BAT, sedangkan exchange lokal yang memperjual-belikan BAT dengan Rupiah salah satunya adalah Indodax.

Penukaran token BAT dengan Bitcoin di Binance (kiri) dan Jual/Beli token BAT menggunakan Rupiah di Indodax (kanan)

Dompet Kripto di Browser Opera dan Mencicipi Generasi Baru Web 3

Generasi terbaru Web 3 merupakan serangkaian pertemuan berbagai macam teknologi yang baru muncul. Teknologi blockchain dan cryptocurrency, serta sistem yang terdistribusi, yang semuanya bersama-sama memperluas kemampuan web yang kita semua gunakan saat ini. Dengan Web 3, pengguna mengendalikan data, identitas, dan penggunaannya milik mereka sendiri.

Dompet Kripto Di Browser Opera

Opera sebagai browser yang banyak dipakai menjadi yang pertama menggabungkan sebuah dompet kripto di dalamnya, memungkinkan akses tanpa batas ke web generasi terbaru Web 3. Dengan fitur ini, pembayaran kripto langsung dari browser ke merchant, antar dompet kripto, dan aplikasi terdesentralisasi (Dapps).

Dompet kripto bawaan Opera saat ini tersedia di Opera for Android dan Opera Touch untuk iOS. Pengguna dapat menyimpan, bertransaksi, dan melakukan pembayaran di Ethereum dan semua token ERC-20, serta kolektibel seperti BlockchainCuties melalui standar ERC-721.

Mengaktifkan Dompet Kripto

Sebelum menggunakan dompet kripto di Opera, fitur ini harus diaktifkan terlebih dahulu. Pilih menu yang berada di kanan bawah kemudian pilih Settings (Image 1). Di Settings, pilih Crypto Wallet (Image 2).

Ketika belum ada dompet kripto di Opera, kamu dapat membuat dompet baru dengan memilih tombol “Open Wallet”, jangan lupa untuk memperhatikan “Term of Use” yang diberikan Opera (Image 3). Setelah pembuatan dompet berhasil, kamu sudah dapat menggunakannya untuk bertransaksi (Image 4).

Klik tombol “Receive” untuk mengetahui alamat Ethereum. Scan barcode yang tertera di layar atau klik “Copy” untuk menyalin alamat Ethereum, alamat ini lah yang digunakan untuk menerima dana ke dompet (Image 5).

Pengaturan dompet dapat dilakukan dari icon “Settings” yang ada di kanan atas, lakukan pengaturan sesuai kebutuhan seperti mengganti mata uang lokal ke IDR (Image 6).

Kirim Ether ke Dompet Kripto Opera

Untuk menggunakan dompet kripto, kamu membutuhkan Ether, yaitu mata uang yang dipakai di jaringan Ethereum, simbol yang dipakai adalah ETH. Kamu bisa membeli ETH melalui tempat jual/beli aset digital, atau dikenal dengan exchange. Untuk pemula, kamu bisa membeli ETH secara instan dari Luno, hanya dengan Rp15.000.

Pastikan kamu sudah memiliki akun Luno, jika belum dapat mendaftar di sini, dan lakukan deposit minimal Rp15.000 (Image 7). Pilih “Send” untuk melakukan pengiriman aset digital dari Luno, kemudian pilih Ethereum (Image 8).

Salin alamat Ethereum dari dompet kripto Opera atau scan barcode jika aplikasi Luno ada diperangkat berbeda, lakukan pengiriman dari dompet IDR Luno (Image 9). Perhatikan baik-baik di layar konfirmasi sebelum melakukan pengiriman (Image 10), karena transaksi tidak dapat dibatalkan jika salah kirim.

Setelah semua proses pengiriman dari Luno selesai, tunggu beberapa saat sampai transaksi berhasil dikonfirmasi di jaringan Ethereum dan ETH masuk ke dompet kripto Opera.

Akses Aplikasi Terdesentralisasi (Dapps)

Kini dompet kamu siap untuk digunakan, cobalah akses desentralized apps (dapps) langsung melalui browser Opera. Opera menyediakan Dapp Store yang dapat diakses dengan memilih icon “D” yang berada di bawah kanan dompet kripto, atau kunjungi langsung https://www.opera.com/dapps-store.

Kali ini kita akan coba menjajal mengisi ulang pulsa ponsel di Bitrefill langsung dari browser Opera. Pilih Bitrefill di laman Opera Dapp Store atau kunjungi langsung bitrefill.com. Lakukan pembelian pulsa sesuai dengan operator dan nominal yang diinginkan (Image 12). Pada laman Payment, pilih tombol “Open in Wallet” untuk melakukan pembayaran langsung dari dompet kripto (Image 13).

Dompet kripto akan langsung melakukan konfirmasi transaksi, perhatikan jumlah Ether yang akan ditransfer berikut alamat Ethereum dan network fee, pilih “Confirm” untuk meneruskan transaksi (Image 14). Tunggu sampai proses transaksi selesai di jaringan Ethereum, kamu bisa melihat status transaksi di tab “Activity” (Image 15)

Silahkan kamu eksplorasi aplikasi terdesentralisasi lainnya di Opera Dapp Store, ada beragam permainan, koleksi dan pertukaran aset digital.

Update 4 Maret 2020: dompet kripto opera mendukung bitcoin dan tron

Opera versi terbaru (saat tulisan ini diperbaharui versi 56.1.xxxx) selain mendukung Ethereum, juga mendukung mata uang kripto Bitcoin (BTC) dan Tron (TRX)

featured image by Opera via opera.com/crypto

Membuat Server Aplikasi dengan ARM Linux

Salah satu keunggulan komputer dengan prosesor ARM, seperti Raspberry Pi, adalah desain yang sederhana membuat prosesor ARM cocok untuk aplikasi berdaya rendah. Kemampuan ini bisa dimanfaatkan sebagai server aplikasi yang dijalankan 24 jam dengan daya listrik yang rendah namun handal menjalankan aplikasi-aplikasi server.

Kini beredar ratusan seri komputer singleboard ditenagai prosesor ARM dengan berbagai variasi dan harga yang terjangkau. Sebuah komputer singleboard merupakan perangkat komputer yang dibangun pada board / papan sirkuit tunggal lengkap dengan mikroprosesor, memori, input/output (I/O) dan fitur-fitur lainnya yang dibutuhkan untuk komputer dapat berfungsi.

Perbandingan berbagai seri komputer singleboard dapat ditemukan: https://en.wikipedia.org/wiki/Comparison_of_single-board_computers

Tujuan Membuat Server Aplikasi

Tujuan server aplikasi yang kita buat bisa beragam, tergantung dari kebutuhan. Kamu bisa menjalankan aplikasi web, baik aplikasi kustom maupun yang sudah tersedia seperti WordPress. Bisa juga membuat server database yang dapat diakses di jaringan lokal, REST API yang dipakai di berbagai aplikasi dan berbagai tujuan lainnya, kamu yang menentukan!

Pada tulisan ini kita akan membuat server aplikasi web yang dijalankan di Linux, lengkap web server dengan NGINX, server database dengan MySQL dan pemprograman aplikasi dengan PHP, atau lebih dikenal dengan LEMP.

Pilih Sistem Operasi

Setiap vendor / maker menyertakan sistem operasi yang dapat berjalan pada SBC tersebut. Sistem operasi tersebut kebanyakan Linux dan Android. Sistem operasi Linux untuk ARM yang akan digunakan sebagai komputer server, kamu bisa menggunakan Armbian yang mendukung banyak perangkat, panduannya dapat dilihat tulisan sebelumnya: Armbian Untuk Komputer Single-Board / Development Board.

Pastikan sistem selalu diperbaharui agar selalu mendapatkan berbagai software terbaru dan tambalan keamanan sistem. Update sistem operasi berbasis Ubuntu / Debian, dapat dilakukan dengan perintah:

sudo apt update && sudo apt upgrade

Konfigurasi Jaringan

Karena komputer singleboard kali ini diperuntukkan sebagai server aplikasi, akses ke dalamnya pun dilakukan sepenuhnya remote melalui jaringan. Pastikan perangkat secara fisik telah terhubung ke jaringan dan lakukan konfigurasi IP.

Sistem operasi berbasis Ubuntu / Debian menggunakan file /etc/network/interfaces untuk konfigurasi jaringan. Berikan IP statis pada perangkat agar dapat diakses permanen menggunakan IP yang sama. Secara default, IP perangkat diatur dinamis dengan konfigurasi berikut:

auto eth0
iface eth0 inet dhcp

Berikan IP statis sesuai dengan setingan jaringan masing-masing. Berikut contoh menggunakan IP statis 192.168.1.2:

auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1

Nyalakan ulang perangkat atau lakukan restart service networking dengan perintah berikut:

sudo systemctl restart networking

Menggunakan Aplikasi Server Terbaru

Selain sistem yang selalu update, kita juga perlu menggunakan rilis aplikasi server terbaru yang tidak didukung oleh repositori sistem.

Sebagai contoh repositori Ubuntu 16.04 hanya mendukung PHP 5.6, sedangkan aplikasi membutuhkan PHP 7.3 terbaru. Kamu dapat mengintal paket PHP terbaru dengan menambahkan repositori independen ke sistem.

Instal paket berikut untuk menggunakan sumber repositori independen:

sudo apt install python-software-properties

Pada tulisan ini, kita akan menggunakan NGINX dan PHP terbaru dengan menggunakan perintah berikut:

sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo add-apt-repository ppa:ondrej/php

Terakhir, lakukan update repositori sistem dengan perintah berikut:

sudo apt update

Kamu dapat menambahkan repositori aplikasi secara mandiri lain dengan mengikuti langkah di atas. Pastikan repositori tersebut mendukung arsitektur ARM yang dipakai oleh sistem operasi.

Server Web dengan NGINX

Aplikasi remote sekarang ini banyak diakses melalui HTTP (Hypertext Transfer Protocol) atau yang kita kenal dengan Web. Untuk dapat mengakses aplikasi berbasis web, kita butuh memasang aplikasi server web. Apache adalah aplikasi server web yang populer, tapi kita akan menggunakan NGINX karena lebih ringan dalam penggunaan resource dan tak kalah handal dibandingkan Apache.

Berikut perintah untuk menginstal NGINX:

sudo apt install nginx

Setelah selesai instalasi, cek NGINX dengan perintah berikut:

$ nginx -v
nginx version: nginx/1.17.0

Buka browser dan arahkan ke perangkat untuk memastikan web server sudah berjalan.

Server Database MySQL

Server aplikasi lain yang butuh dipasang adalah server aplikasi database. Ada beberapa pilihan aplikasi server database yang dapat kamu gunakan, yang paling popular di antaranya MySQL dan PostgreSQL. Di sini kita akan menggunakan MySQL.

Instal MySQL dengan perintah sebagai berikut:

sudo apt install mysql-server

Atur password root saat proses instalasi berlangsung. Akses server MySQL dengan aplikasi klien berikut:

$ mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

mysql> 

Atur konfigurasi MySQL agar dapat diakses remote dengan menambahkan baris berikut di file /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 0.0.0.0

Lakukan restart service mysql dengan perintah berikut:

sudo systemctl restart mysql

Akses klien dari komputer berbeda dengan perintah berikut:

mysql -h 192.168.1.2 -u root -p

Gunakan MySQL Workbench untuk memudahkan mengatur database.

Aplikasi klien MySQL berbasis grafis, dapat diunduh dari https://www.mysql.com/products/workbench/

Pemprograman Aplikasi dengan PHP

Terakhir adalah menginstal PHP untuk pemprograman aplikasi. Aplikasi tersebut diakses melalui web dan juga berfungsi sebagai interface / antar-muka untuk mengakses server database. Selain PHP, kamu juga dapat memilih pemprograman lain seperti Python.

Agar PHP dapat dipasangkan ke NGINX, kita akan menggunakan PHP FPM (Fast Process Manager). Berikut instalasi paket php-fpm:

sudo apt install php7.3-fpm

Lakukan modifikasi di file /etc/nginx/sites-available/default agar aplikasi PHP dapat dijalankan melalui NGINX:

server {
  # ...
  index index.php index.html;

  location / {
    try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.3-fpm.sock;
  }
  # ...
}

Lakukan restart service NGINX sebagai berikut:

sudo systemctl restart nginx

Buat file /var/www/html/index.php, tuliskan skrip singkat di bawah, kemudian jalankan melalui web browser untuk mengetahui semua telah berjalan.

<?php
echo "<h1><center>PHP App!</center></h1>";

PHP menyediakan banyak ekstensi yang dapat diaktifkan sesuai dengan kebutuhan. Ekstensi esensial seperti php-mysql untuk berinteraksi dengan MySQL, php-gd untuk manipulasi grafis dinamis, php-curl untuk mengaktifkan cURL dan banyak lagi.

sudo apt install php7.3-mysql php7.3-gd php7.3-curl php7.3-mbstring php7.3-json php7.3-intl php7.3-sqlite3

Amankan Akun dengan 2FA (Two-Factor Authentication)

Pernahkah akun media sosial kamu seperti Facebook diambil alih oleh orang lain? Jika pernah terjadi, sebaiknya gunakan 2FA sebagai langkah tambahan mengamankan akun online.

Dalam lingkungan online saat ini, akun online masih rentan terhadap serangan siber jika hanya menggunakan “username dan password” sebagai pengaman login. Banyak akun dapat dirugikan dan data pribadi berada di bawah ancaman siber (cyber threats).

Bukan hanya data pribadi di media sosial, yang lebih membahayakan adalah data finansial bahkan data perusahaan, mengingat transaksi online menjadi kegiatan sehari-hari. Lihat tulisan: Amankan Bisnis Kamu dari Ancaman Siber.

Apa itu Two-Factor Authentication (2FA)?

Two-factor authentication (2FA) atau istilah lainnya multi-factor authentication (MFA) adalah keamanan tambahan, membantu mengatasi celah keamanan siber yang hanya menggunakan login hanya dengan password. Merupakan langkah tambahan lapisan pengamanan, melengkapi model login menggunakan username dan password dengan menambahkan sebuah kode khusus yang dimiliki pengguna.

Kode tambahan untuk pengamanan ini dapat dihasilkan dengan berbagai cara, di antaranya melalui perangkat yang dimiliki oleh pengguna, atau dikirimkan melalui SMS, panggilan suara dan email.

Bagaimana cara kerja 2FA?

Pernahkah kamu melakukan transaksi internet banking? Kamu bisa login ke halaman internet banking menggunakan username dan password, kemudian dapat melihat saldo dan mutasi, tapi harus menggunakan kode token/key untuk dapat mengirimkan uang.

Itulah salah satu lapisan pengamanan tambahan agar orang lain tidak dapat memindahkan uang dari akun bank meski orang tersebut berhasil login menggunakan username dan password. Karena setiap transaksi akan menghasilkan kode yang berbeda, langkah keamanan ini dapat mencegah uang berpindah tangan ke orang lain yang tidak berhak.

KeyBCA digunakan untuk pengamanan tambahan transaksi perbankan

Bukan hanya melalui perangkat khusus seperti transaksi perbankan, kode khusus 2FA juga bisa dikirimkan melalui SMS dan email. Saat melakukan login di media sosial atau ecommerce pada perangkat berbeda yang baru dikenali, biasanya akan dikirimi kode verifikasi melalui email atau SMS. Itu lah bentuk lain 2FA untuk mengamankan akun online.

Aplikasi mobile 2FA di ponsel

Jika sebelumnya kode 2FA dihasilkan oleh perangkat khusus, kini penggunaan 2FA makin personal dengan memasang aplikasi 2FA di ponsel. Terlebih ponsel pintar hampir dimiliki setiap orang dan digunakan sehari-hari.

Aplikasi tersebut di antaranya Google Authenticator dan Authy. Setiap akun online yang sudah menerapkan 2FA dapat ditambahkan ke dalam aplikasi tersebut. Kode setiap akun akan berbeda dan berubah-ubah.

Token yang dihasilkan dari aplikasi Google Authenticator
Token yang dihasilkan dari aplikasi Authy

Google Authenticator dapat diunduh di Play Store dan App Store, sedang Authy dapat diunduh melalui https://authy.com

Menerapkan 2FA pada akun Facebook

Perlukah akun media sosial ditambahkan 2FA? Jika akun Facebook kamu berisikan detil informasi pribadi, admin grup atau page atau bahkan untuk posting dagangan di marketplace, sepertinya perlu menambahkan pengamanan tambahan dengan 2FA agar akun kamu tidak dapat disalah gunakan.

Sebelum menerapkan 2FA, pasang terlebih dahulu aplikasi Google Authenticator atau Authy di ponsel. Login ke laman website Facebook, masuk ke laman Pengaturan. Pilih menu “Keamanan dan Info Login”, pengaturan 2FA ada di kotak “Autentikasi Dua-Faktor”

Klik tombol “Edit” di bagian “Gunakan autentikasi dua-faktor”, kemudian klik tombol “Mulai” untuk memulai pengaturan 2FA.

Pilih “Aplikasi Autentikasi” pada kotak dialog “Pilih Metode Keamanan”. Opsi ini untuk mengaktifkan 2FA menggunakan aplikasi di ponsel.

Buka aplikasi Google Authenticator, klik tombol “+” yang ada di kanan bawah, dan pilih “Scan a barcode” yang tertera di layar. Setelah berhasil, akun baru akan ditambahkan di aplikasi, dan kode 2FA sudah dapat digunakan.

Jangan lupa untuk backup key yang diberikan. Simpan kode / key private tersebut di tempat yang aman, jangan sampai diambil orang lain. Suatu saat ketika kamu reset ulang ponsel atau memindahkan 2FA ke perangkat lain, kode tersebut dapat dimasukkan secara manual.

Berikut adalah tampilan memasukkan key secara manual di aplikasi Authy:

Terakhir, konfirmasikan kode yang tertera di aplikasi 2FA. Setelah berhasil, silahkan login kembali dan akan muncul laman untuk memasukkan kode 2FA sebagai keamanan tambahan setelah login berhasil.

Gunakan cara yang sama pada akun online lainnya, seperti di Gmail atau akun online penting lain. Pada prinsipnya sistem atau aplikasi yang sudah menerapkan 2FA menggunakan cara yang sama. Langkah-langkah di atas dapat diterapkan di akun online sistem lain.

Laravel Artisan Console, Membuat Aplikasi CLI

Ketika kamu membutuhkan antarmuka command-line (command-line interface / CLI), kamu dapat memanfaatkan fitur Artisan Console. Laravel menyediakan sejumlah perintah Artisan dengan menggunakan memanggil perintah list

php artisan list

Untuk menambahkan perintah Artisan, dapat dibuat dengan perintah make:command. Kita akan membuat sebuah perintah Artisan untuk menampilkan kota seperti pada contoh sebelumnya:

php artisan make:command ViewCities

File perintah Artisan tersebut disimpan di app\Console\ViewCities.php.

<?php
namespace App\Console\Commands;

use Illuminate\Console\Command;

class ViewCities extends Command
{

    protected $signature = 'city:view';

    protected $description = 'View cities';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        //
    }
}

Isikan variabel $signature dengan nama perintah Artisan dan masukkan deskripsinya di variabel $description.

Baris-baris kode yang ada di method handle() akan dieksekusi saat perintah Artisan yang dibuat dijalankan. Berikut contoh kode untuk menampilkan daftar kota:

public function handle()
{
    $this->info("Daftar Kota");

    $cities = \App\City::all();
    foreach ($cities as $city) {
        $this->line("- {$city->name}: {$city->map}");
    }
}

Agar perintah Artisan dapat digunakan, masukkan class tersebut ke dalam variabel $commands yang ada di file app/Console/Kernel.php

protected $commands = [
        ...
        Commands\ViewCities::class
    ];

Panggil perintah artisan tersebut dengan perintah:

  php artisan city:view

Berikut kode lengkap:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class ViewCities extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'city:view';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'View cities';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->info("Daftar Kota");

        $cities = \App\City::all();
        foreach ($cities as $city) {
            $this->line("- {$city->name}: {$city->map}");
        }
    }
}

Halal bi Halal Kripto bersama Gopax

Gopax Indonesia, sebagai salah satu exchange aset kripto di Indonesia, mengadakan meetup dalam rangka Halal bi Halal. Diselenggarakan di Kolega Coworking Space pada Jum’at 21 Juni 2019, acara ini dihadiri komunitas kripto di Indonesia.

Tema yang diangkat pada acara kali ini mengenai teknologi Bitcoin dan Blockchain, serta Altcoins. Dihadirkan pembicara Teguh Harmanda dari Ethereum Indonesia membahas tentang Teknologi Bitcoin dan Blockchain, dan Ivan Tisnabudi dari Latoken mengangkat Fungsi dan Use Case Altcoins.

Pertama membahas bagaimana kemunculan Bitcoin saat krisis ekonomi global 2008, di mana teknologi dari Bitcoin hadir untuk menyelesaikan masalah dalam menghilangkan ketergantungan dari otoritas terpusat dan menyelesaikan ketidakefektikan sistem dunia nyata. Kehadiran Bitcoin melahirkan teknologi Blockchain, sistem yang terdesentralisasi melalui jaringan peer-to-peer dan menghilangkan middleman dalam melakukan transaksi ekonomi.

Potensi dari teknologi Bitcoin dan Blockchain dimanfaatkan dan ditingkatkan dengan kehadiran koin-koin kripto lain yang dinamakan Altcoins (Alternative Coins). Seperti Ethereum melakukan peningkatan dengan memasukkan pemprograman pada Blockchain, Monero dengan transaksi private, Ripple untuk transaksi perusahaan payment dan bank, dan baru-baru ini Facebook mengumumkan koin kripto bernama Libra.

Apakah Bitcoin legal?

Itulah pertanyaan yang sering diajukan orang tentang Bitcoin dan koin kripto lainnya. Berdasarkan regulasi, Bitcoin dan koin kripto lainnya legal sebagai aset berdasarkan peraturan Bappebti No. 99/2018 dan No. 5/2019.

Jadi Bitcoin dan koin-koin kripto lainnya legal ya teman-teman, hanya sebagai aset, bukan sebagai alat transaksi pembayaran, karena pembayaran yang sah di Indonesia hanya menggunakan Rupiah.

Eloquent ORM di Laravel, Membuat Model Aplikasi

Laravel menyediakan cara mudah dalam mengakses database yaitu Eloquent ORM (Object Relational Model), sebuah implementasi ActiveRecord ketika bekerja dengan database. Setiap tabel database memiliki hubungan dengan model yang digunakan untuk berinteraksi dengan tabel tersebut.

Pada tulisan sebelumnya, kita sudah memiliki tabel dalam database yang dibuat melalui migration bernama cities dan memasukkan data dummy ke dalam tabel tersebut. Tulisan ini akan melanjutkan pemodelan data yang dihubungkan dengan tabel dan data di dalamnya.

Model aplikasi mengijinkan untuk query data di dalam tabel, serta menambahkan, mengubah atau menghapus data tersebut. Tulisan kali ini akan membahas cara membuat model, bagaimana ketentuan dalam model dan mengambil data (query) yang akan ditampilkan ke laman web.

Membuat Model

Membuat model dapat dilakukan dengan menggunakan perintah Artisan make:model. Model yang akan dibuat bernama City dan dihubungkan ke tabel cities yang terdapat di database.

$ php artisan make:model City

Dalam pembuatan model, migration dapat dibuat secara otomatis dibuat dengan menyertakan opsi --migration atau disingkat -m. Berikut perintah pembuatan model beserta migration:

$ php artisan make:model City --migration
$ php artisan make:model City -m
Model created successfully.
Created Migration: 2019_03_17_005308_create_cities_table

Model yang dibuat dengan perintah Artisan di atas akan disimpan di file app/City.php, berikut isi file model City:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    
}

Ketentuan Pemodelan

Eloquent menganggap bahwa kelas model City secara otomatis terhubung dengan tabel cities, bentuk jamak dari nama kelas tersebut. Begitu pula ketika model User dibuat, maka diasumsikan terdapat tabel users di database yang dihubungkan dengan model tersebut. Keterkaitan model dengan tabel database tersebut dapat didefinisikan secara manual dengan melalui properti $table:

class City extends Model
{
    protected $table = 'tbl_city';    
}

Selain nama tabel, Eloquent juga menganggap bahwa setiap tabel memiliki kolom bernama id sebagai primary key. Gunakan properti $primaryKey jika ingin menggunakan nama kolom lain sebagai primary key tabel:

class City extends Model
{
    ...
    protected $primaryKey = 'city_ID';    
}

Elequent juga memiliki 2 kolom timestamp yang selalu ada di model yaitu created_at dan updated_at. Jika tidak menginginkan keberadaan kolom timestamp ini, set properti $timestamps menjadi false.

class City extends Model
{
    ...
    protected $timestamps = false;
}

Sama seperti pada tulisan sebelumnya membuat migration database, struktur tabel cities ketika dibuat menggunakan schema builder adalah sebagai berikut:

Schema::create('cities', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name');
    $table->string('map');
    $table->timestamps();
});

Masukkan data dummy dengan menggunakan seeder database, dan query data tersebut pada model dengan query builder. Sebagai contoh memanggil semua data dengan metode all():

App\City::all();

Untuk memastikan model berjalan dengan baik dengan memanggil metode di atas untuk ditampilkan ke dalam view seperti di bawah ini:

...
<h1>Daftar Kota Jabodetabek</h1>
@php $cities = App\City::all(); @endphp
<ul class="list-group">
    @foreach ($cities as $city)
    <li class="list-group-item">
        <a href="{{ $city->map }}" target="_blank">
            {{ $city->name }}
        </a>
    </li>
    @endforeach
</ul>
...

Hubungan antar Tabel

Tabel-tabel di database sering kali berhubungan satu sama lain. Sebagai contoh tabel People yang berisikan data penduduk berhubungan dengan tabel Cities.

Eloquent memudahkan mengelola hubungan antar tabel tersebut dan mendukung berbagai jenis hubungan. Untuk mempermudah pemahaman tentang relasi, sekarang kita buat model seorang penduduk yaitu model Person (bentuk tunggal dari People) yang berelasi dengan model City.

$ php artisan make:model Person -m
Model created successfully.
Created Migration: 2019_03_17_072450_create_people_table

Dari perintah di atas, dibuat secara otomatis migration tabel people, buat struktur tabel sebagai berikut:

Schema::create('people', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('city_id');
    $table->string('name');
    $table->string('age');
    $table->timestamps();
    $table->foreign('city_id')->references('id')->on('cities');
});

Dari struktur di atas dapat kita lihat bahwa terdapat field city_id sebagai foreign key yang berelasi dengan tabel cities. Jika dimodelkan, hubungan ini termasuk ke dalam tipe one-to-many, di mana City dapat mempunyai banyak data Person. Berikut kode pemodelan yang dilakukan di model City:

class City extends Model
{
    public function people()
    {
        return $this->hasMany('App\Person');
    }
}

Begitu pula di model Person yang mempunyai hubungan terbalik dengan model City di definisikan sebagai berikut:

class Person extends Model
{
    public function city()
    {
        return $this->belongsTo('App\City');
    }
}

Setelah hubungan dipetakan, kita dapat mengakses koleksi data Person dengan mengakses properti people

$people = App\City::find(1)->people;

foreach ($people as $person) {
    //
}

Kode Github

Cek Pembayaran Bitcoin dengan WebSocket

Pembayaran menggunakan Bitcoin tidak terbatas wilayah, kita dapat memanfaatkan Bitcoin sebagai pembayaran internasional. Kamu bisa mengkonversi harga barang atau jasa dari Rupiah atau Dolar ke dalam Bitcoin, dan pelanggan mengirim sejumlah Bitcoin ke alamat dompet yang kamu miliki.

Pada tulisan kali ini kita akan memanfaatkan websocket untuk mengecek penerimaan bitcoin yang dikirimkan ke alamat tertentu. Kita menggunakan websocket API dari blockchain.com, silahkan kunjungi alamat berikut untuk referensi penggunaan websocket API: https://www.blockchain.com/api/api_websocket.

Untuk memulai, berikut kode HTML pertama yang akan digunakan untuk pengecekan transaksi Bitcoin yang masuk:

....
<body>
  <h2>Request BTC</h2>
  <p style="font-weight: bold">Address: <span id="btc_addr"></span></p>
  <div id="output"></div>
  
  <script language="javascript" type="text/javascript">
    var ws_uri = "wss://ws.blockchain.info/inv";
    var addr = "19M6H...................jc74WV";
    var output;
    var response = new Array();

    function init() {
      output = document.getElementById("output");
      document.getElementById("btc_addr").innerHTML = addr;
      do_ws();
    }

    ...
  </script>
</body>
....

Pertama kita definisikan beberapa variabel sebagai berikut:

  • ws_uri: alamat koneksi ke websocket API milik blockchain.com dengan alamat wss://ws.blockchain.info/inv
  • addr: alamat Bitcoin yang dituju untuk menerima pembayaran, masukkan alamat Bitcoin yang diinginkan di sini.
  • output: semua output yang diterima dari websocket akan dimasukkan ke dalam tag <div id="output">
  • response: digunakan untuk menyimpan response dari transaksi yang masuk

Selanjutnya kita membuat fungsi do_ws(). Fungsi ini berisikan intruksi penggunaan websocket, berikut kode untuk fungsi do_ws():

....
function do_ws() {
  websocket = new WebSocket(ws_uri);
  websocket.onopen = function(evt) { ws_open(evt) };
  websocket.onclose = function(evt) { ws_close(evt) };
  websocket.onmessage = function(evt) { ws_message(evt) };
  websocket.onerror = function(evt) { ws_error(evt) };
}
....

Masing-masing fungsi websocket onopen(), onclose(), onmessage() dan onerror() akan menjalankan fungsi-fungsi yang didefinisikan sebagai berikut:

....
function ws_open(evt) {
  to_screen("CONNECTED");
  do_send(JSON.stringify({"op":"addr_sub", "addr": addr}));
}

function ws_close(evt) {
  to_screen("DISCONNECTED");
}

function ws_message(evt) {
  response = JSON.parse(evt.data);
  to_screen('<span style="color: blue;">TX: ' + response.x.hash + '</span>');
  do_send(JSON.stringify({"op":"addr_unsub", "addr": addr}));
  websocket.close();
}

function ws_error(evt) {
  to_screen('<span style="color: red;">ERROR: ' + evt.data + '</span>');
}
....

Dapat dilihat dari fungsi ws_open(), setelah websocket berhasil terkoneksi, pesan yang dikirim ke websocket adalah {"op":"addr_sub", "addr": addr}. Pesan ini bertujuan subscribe ke websocket untuk memeriksa transaksi yang belum terkonfirmasi dalam jaringan. Ketika ada pengiriman bitcoin masuk, transaksi belum terkonfirmasi tersebut akan diterima dalam output transaksi sebagai berikut:

{
  "op": "utx",
  "x": {
    "lock_time": 0,
    "ver": 2,
    "size": 454,
    "inputs": [
       ...
    ],
    ...
    "hash": "c84d............1d6c",
    "vout_sz": 3,
    ...
    "out": [
      {
        ....
        "addr": "19M6H...................jc74WV",
        "value": 27580,
        ...
      },
      {
        ...
        "type": 0,
        "addr": "1EF...Wua",
        ....
      },
      {
        ...
      }
    ]
  }
}

Output transaksi tersebut diterima oleh fungsi ws_message() kemudian memproses data yang diterima dari transaksi. Proses yang dilakukan di sini masih sederhana, ketika transaksi berhasil diperoleh, hash transaksi / txid akan ditampilkan ke halaman web, kemudian unsubscribe transaksi dari alamat Bitcoin, dan menutup koneksi ke websocket.

Ada dua fungsi lain yang dibutuhkan dalam aplikasi ini, yaitu fungsi do_send() untuk mengirim pesan ke websocket, dan fungsi to_screen() untuk menampilkan output di halaman web. Berikut intruksi dua fungsi tersebut:

....
function do_send(message) {
  to_screen("SENT: " + message);
  websocket.send(message);
}

function to_screen(message) {
  var pre = document.createElement("p");
  pre.style.wordWrap = "break-word";
  pre.innerHTML = message;
  output.appendChild(pre);
}
....

Terakhir, jalankan fungsi init() dengan menambahkan intruksi berikut:

window.addEventListener("load", init, false);

Ketika dijalankan, berikut tampilan aplikasi pengecekan transaksi yang masuk menggunakan websocket:

Dari penjelasan di atas, kita dapatkan kode HTML lengkap sebagai berikut:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Request BTC</title>
</head>
<body>
  <h2>Request BTC</h2>
  <p style="font-weight: bold">Address: <span id="btc_addr"></span></p>
  <div id="output"></div>
  
  <script language="javascript" type="text/javascript">
    var ws_uri = "wss://ws.blockchain.info/inv";
    var addr = "19M6H...................jc74WV";
    var output;
    var response = new Array();

    function init() {
      output = document.getElementById("output");
      document.getElementById("btc_addr").innerHTML = addr;
      do_ws();
    }

    function do_ws() {
      websocket = new WebSocket(ws_uri);
      websocket.onopen = function(evt) { ws_open(evt) };
      websocket.onclose = function(evt) { ws_close(evt) };
      websocket.onmessage = function(evt) { ws_message(evt) };
      websocket.onerror = function(evt) { ws_error(evt) };
    }

    function ws_open(evt) {
      to_screen("CONNECTED");
      do_send(JSON.stringify({"op":"addr_sub", "addr": addr}));
    }

    function ws_close(evt) {
      to_screen("DISCONNECTED");
    }

    function ws_message(evt) {
      response = JSON.parse(evt.data);
      to_screen('<span style="color: blue;">TX: ' + response.x.hash + '</span>');
      do_send(JSON.stringify({"op":"addr_unsub", "addr": addr}));
      websocket.close();
    }

    function ws_error(evt) {
      to_screen('<span style="color: red;">ERROR: ' + evt.data + '</span>');
    }

    function do_send(message) {
      to_screen("SENT: " + message);
      websocket.send(message);
    }

    function to_screen(message) {
      var pre = document.createElement("p");
      pre.style.wordWrap = "break-word";
      pre.innerHTML = message;
      output.appendChild(pre);
    }

    window.addEventListener("load", init, false);
  </script>
</body>
</html>

Kode di tulisan ini masih sederhana, kamu bisa kembangkan sesuai kebutuhan. Kamu bisa menambahkan berapa jumlah Bitcoin yang akan diterima, menambahkan barcode, transaksi akan expire dalam waktu sekian menit, dan kebutuhan lainnya yang bisa ditambahkan sesuai kemampuan programming kamu.

Happy coding!

Kode Github