Senin, 09 Desember 2024

Backup Semua Database PostgreSQL dalam Container

Langkah 1: Identifikasi Container PostgreSQL

Gunakan perintah docker ps untuk menemukan container PostgreSQL:

docker ps

Catat CONTAINER ID atau NAMES dari container PostgreSQL.

Langkah 2: Backup Semua Database

Gunakan docker exec untuk menjalankan pg_dumpall di dalam container:

docker exec -t <CONTAINER_ID_OR_NAME> pg_dumpall -U <username> > backup_all_databases_$(date +%Y%m%d_%H%M%S).sql

Di sini, <CONTAINER_ID_OR_NAME> adalah ID atau nama container PostgreSQL Anda, dan <username> adalah nama pengguna untuk PostgreSQL.

Langkah 3: Menyimpan Backup di Lokasi yang Aman

Simpan backup di lokasi di luar container untuk keamanan, contoh:

docker exec -t <CONTAINER_ID_OR_NAME> pg_dumpall -U <username> > /path/ke/backup/di/host/backup_all_databases_$(date +%Y%m%d_%H%M%S).sql

/path/ke/backup/di/host adalah lokasi di host di mana Anda ingin menyimpan file backup.

Langkah 4: Verifikasi Backup

Setelah backup dibuat, Anda bisa menguji restore-nya dengan membuat container baru atau menggunakan container yang ada untuk restore semua database:

cat backup_all_databases_20241209_080000.sql | docker exec -i <CONTAINER_ID_OR_NAME> psql -U <username> postgres

postgres di sini adalah database default tempat psql akan menjalankan query. Ini akan menginisiasi restore semua database dari file backup.

Catatan: Pastikan pengguna yang Anda gunakan (<username>) memiliki izin yang cukup untuk mengakses semua database yang akan di-backup. Juga, file backup bisa sangat besar jika Anda memiliki banyak database atau data dalam jumlah besar.

Minggu, 12 November 2023

Cara Mengetahui Besar Database PostgreSQL Tanpa Mendownloadnya

Berikut adalah langkah-langkah untuk mengetahui ukuran semua database di instance PostgreSQL yang berjalan di dalam kontainer Docker:

1. Mengakses Kontainer Docker:
   Gunakan perintah `docker exec` untuk mengakses shell dari kontainer Docker yang menjalankan PostgreSQL. Gantikan `[container_name_or_id]` dengan nama atau ID kontainer yang sebenarnya:

   ```
   docker exec -it [container_name_or_id] bash
   ```

2. Menghubungkan ke PostgreSQL:
   Di dalam kontainer Docker, hubungkan ke server PostgreSQL menggunakan perintah `psql`. Kita bisa masuk sebaga user `postgres` atau sebagai user lain. Tetapi dalam contoh ini kita menggunakan user postgres:

   ```
   psql -U postgres
   ```

3. Melihat Besar Semua Database:
   Setelah berada dalam `psql`, eksekusi query SQL berikut ini untuk mendapatkan ukuran setiap database di instance PostgreSQL:

   ```
   SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
   ```

   Perintah ini akan mencantumkan semua database beserta ukurannya dalam format yang mudah dibaca (seperti MB atau GB).

4. Opsional - Total Ukuran Semua Database:
   Jika Anda tertarik untuk mengetahui total ukuran gabungan semua database, Anda dapat menggunakan perintah ini:

   ```
   SELECT pg_size_pretty(SUM(pg_database_size(datname))) FROM pg_database;
   ```

   Ini akan memberikan Kita satu ukuran kumulatif untuk semua database.

Setelah menjalankan perintah-perintah ini, Kita akan memahami ukuran masing-masing database dan ukuran total yang ditempati oleh semua database di instance PostgreSQL Kita di dalam Docker.

Sabtu, 23 September 2023

Menggunakan Artillery untuk Testing

Dalam era digital saat ini, meningkatkan performa aplikasi web dan memastikan aplikasi dapat menangani beban yang besar adalah hal yang penting. Salah satu alat yang dapat membantu kita memastikan bahwa aplikasi kita tahan banting adalah dengan melakukan pengujian beban. Salah satu alat untuk melakukan pengujian beban adalah Artillery.

Apa itu Artillery?

Artillery adalah alat pengujian beban yang modern, powerful, dan fleksibel. Dengan Artillery, pengembang dan tester dapat mengujian aplikasi mereka di berbagai skenario untuk memastikan bahwa aplikasi mampu menangani beban yang diharapkan. Artillery mendukung pengujian terhadap berbagai protokol seperti HTTP, WebSocket, dan lainnya.

Mengapa Menggunakan Artillery?

  1. Sederhana namun Kuat: Artillery memiliki konfigurasi yang sederhana dalam format YAML atau JSON, namun memiliki fitur yang kuat untuk menguji berbagai aspek aplikasi.
  2. Skalabilitas: Anda dapat menjalankan pengujian dari satu mesin atau mendistribusikannya ke banyak mesin untuk mensimulasikan ribuan pengguna.
  3. Statistik yang Detail: Setelah pengujian, Artillery memberikan laporan rinci mengenai latensi, throughput, jumlah kesalahan, dan metrik lainnya.
  4. Ekstensibilitas: Artillery dapat diextend dengan plugin untuk menambahkan fungsionalitas atau untuk mendukung protokol lain.

Bagaimana Cara Menggunakan Artillery?

  1. Instalasi

    Untuk memulai, Anda perlu menginstal Artillery. Dengan asumsi Anda telah menginstal Node.js, Anda dapat menginstal Artillery dengan npm:

    npm install -g artillery
  2. Membuat Skenario Pengujian

    Buat file konfigurasi dalam format YAML atau JSON. Sebagai contoh:

    
    config:
      target: 'http://your-api-endpoint.com'
      phases:
        - duration: 60
          arrivalRate: 5
    scenarios:
      - flow:
          - get:
              url: '/endpoint'
          - post:
              url: '/post-endpoint'
              json:
                key1: 'value1'
                key2: 'value2'
            

    Dalam konfigurasi di atas, Artillery akan mengirimkan 5 permintaan per detik ke http://your-api-endpoint.com/endpoint selama 60 detik.

  3. Jalankan Pengujian

    Setelah Anda memiliki file konfigurasi, Anda dapat menjalankan pengujian dengan perintah:

    artillery run namafilekonfigurasi.yml
  4. Menganalisis Hasil

    Setelah pengujian selesai, Artillery akan menampilkan ringkasan statistik. Anda juga dapat menyimpan hasil pengujian ke file atau database untuk analisis lebih lanjut.

Kesimpulan

Artillery adalah alat pengujian beban yang sederhana namun kuat yang dapat membantu pengembang memastikan aplikasi mereka berfungsi dengan baik di bawah beban. Dengan Artillery, Anda dapat dengan mudah mensimulasikan lalu lintas ke aplikasi Anda dan mendapatkan insight mengenai performa dan titik-titik kelemahan yang mungkin ada.

Senin, 04 September 2023

Cara mengambil public key dari transaksi Ethereum

Pada saat pembuatan address pada walet Metamask atau wallet web3 lainnya, public key selalu tidak ditampilkan walaupun sebenarnya sudah dibuat. 

Ini menjadi masalah tersendiri jika kita ingin memanfaatkan key ini untuk percakapan dengan enkripsi asimetri.

Address yang dihasilkan wallet web3 tidak bisa dikonversi langsung menjadi public key dengan mudah walaupun address tersebut merupakan turunan dari public key. Ini karena address itu dihasilkan melalui tahapan dari public key yang melibatkan fungsi satu arah (hashing) seperti berikut;

1. Mendapatkan Public Key

Setelah private key di generate. artinya kita juga memiliki asosiasi dengan public key. Public key disini dinamakan dengan Public ECDSA Key

Public key ini dimasukkan kedalam fungsi keccak-256(public key)

2. Dimasukkan kedalam fungsi Keccak-256 hash

3. Mengambil 20 bytes terakhir

Untuk mengenerate secara online, Anda dapat mencoba pada link berikut: https://www.rfctools.com/ethereum-address-test-tool/

Harap berhati-hati, jangan pernah memasukkan private key Anda.


Sedangkan untuk mendapatkan public key jika addressnya diketahui, kita tidak dapat membalik alur tersebut. Satu-satunya langkah yang dapat dilakukan adalah dengan membuat transaksi ethereum sehingga kita bisa mendapatkan nilai v, r dan s dari transaksi tersebut

Berikut adalah codenya;

import Web3 from 'web3';
import Cookie from "js-cookie";
import { fromRpcSig, hashPersonalMessage, ecrecover, pubToAddress } from 'ethereumjs-util';

var web3;
if (window.ethereum) {
web3 = new Web3(window.ethereum);
} else {
web3 = new Web3(window.ethProvider);
}
// The message you want to sign
const message = 'I want to get my public key';

// Get the user's connected Ethereum address
const userAddress = Cookie.get("connectedAddress");

try {
// Sign the message using Metamask
const signature = await web3.eth.personal.sign(message, userAddress);

// Ensure the input is a Buffer
const signatureBuffer = Buffer.from(signature.slice(2), 'hex'); // Remove the '0x' prefix

// Extract the components from the signature
const { v, r, s } = fromRpcSig(signatureBuffer);

// Calculate the message hash
const messageHash = hashPersonalMessage(Buffer.from(message));

// Recover the public key
const publicKey = ecrecover(messageHash, v, r, s);

// Convert the publicKey to a hexadecimal string
// (this line just to make sure the public key in hex format)
const publicKeyHex = '0x' + publicKey.toString('hex');
console.log(`Public Key (Hex): ${publicKeyHex}`);

// Convert the public key to an Ethereum address
const recoveredAddress = '0x' + pubToAddress(publicKey).toString('hex');

console.log(`Recovered Address: ${recoveredAddress}`);

} catch (error) {
console.error('Error:', error);
}

Pada code diatas, kita menggunakan web3 wallet Metamask. Disini kita menghindari meg-ekspose private key. 

Strategi yang digunakan adalah;

1. Menandatangani sebuah pesan. 

2. Meng-ekstrak v, r dan s

3. Membuat message hash

4. Merecover public key dengan function ecrecover dan memasukkan nilai message hash, v, r dan s

5. Mengambil address dengan function pubToAddress

Untuk memastikan public key yang Anda convert kepada Address adalah benar, Anda dapat melakukan test sekali lagi dengan mengambil public key dari baris `console.log(`Public Key (Hex): ${publicKeyHex}`);` dan memasukkannya pada public key ECDSA pada link  https://www.rfctools.com/ethereum-address-test-tool/



Kamis, 19 Agustus 2021

Apa itu blockchain



Blockchain adalah sebuah database bersama yang datanya tidak dapat diubah. Blockchain  memfasilitasi proses pencatatan transaksi dan pelacakan aset. Aset dapat berwujud (rumah, mobil, uang tunai, tanah) atau tidak berwujud (kekayaan intelektual, paten, hak cipta, merek). Hampir segala sesuatu yang berharga dapat dilacak dan diperdagangkan di jaringan blockchain, mengurangi risiko dan memotong biaya untuk semua yang terlibat.


Kenapa Blockchain itu penting?


Bisnis berjalan berdasarkan data dan informasi. Hubungan antara entitas dalam bisnis memerlukan kepercayaan dan transparansi. Blockchain sangat ideal untuk menyampaikan informasi karena menyediakan informasi secara langsung dan sepenuhnya transparan karena disimpan didalam buku besar yang tidak dapat diubah. Blockchain dapat diakses oleh semua orang yang terhubung dalam jaringan blockchain tersebut. Blockchain dapat melacak pesanan, pembayaran, akun, produksi, dan banyak lagi. 



Apa saja yang bisa dicatat didalam blockchain?


Pada dasarnya blockchain dapat mencatat aset tangible atau berwujud seperti; rumah, mobil, uang tunai, tanah, kepemilikan saham dan lain-lain. 

Selain itu aset tak berwujud seperti; kekayaan intelektual, paten, hak cipta, merek dan lain-lain.


Apakah ada pertanyaan tentang blockchain?
Apakah bisnis Anda cocok atau kedepan harus menggunakan blockchain?

Kamis, 07 November 2019

Berapa harga pembuatan software, website dan aplikasi mobile?

Jika Anda ingin membuat website, software atau aplikasi mobile, pasti pertanyaan seperti pada judul diatas terlintas dikepala Anda.

Untuk lebih mudah dalam tulisan ini, sofware, aplikasi web atau aplikasi mobile kita sebut sebagai aplikasi saja.

Pertanyaan tersebut diatas sangat umum ditanyakan oleh orang yang ingin membuat sebuah aplikasi.  Beberapa developer yang Anda tanya, mereka tidak langsung menjawab. Sebenarnya ini pertanda bagus, karena developer yang sedang Anda tanya cukup berpengalaman. Dia pasti akan balik menanyakan beberapa hal seperti deskripsi aplikasi, lingkup pekerjaan dan fitur yang diinginkan.

Mari kita kembali lagi dan membuat pertanyaan yang lebih spesifik. Misalnya; Berapakah harga untuk membuat aplikasi seperti Bukalapak?

Walaupun si developer sudah tahu bisnis model yang dijalankan oleh Bukalapak tesebut, mereka tidak serta merta langsung mengetahui bagaimana proses Bukalapak bekerja dibelakang layar. Lazimnya dia akan menganalisa halaman-halaman yang dibutuhkan untuk membuat aplikasi tersebut. Seperti; Login, lupa password, landing, halaman satu produk, halaman produk per-kategori, halaman dashboard penjual, halaman dashboard untuk admin (anda sebagai pemilik web app) dan lain sebagainya. Selain hal tersebut, pasti developer akan memikirkan bagaimana desain infrastrukturnya seperti; apakah menggunakan shared hosting, virtual private server atau colocation. Lebih jauh lagi analisanya tentang security seperti secure socket layer dan lain sebagainya.

Jadi, sudah terbayang bukan betapa sebenarnya relatif kompleknya sebuah proses development dan aplikasi bekerja. Tentu saja seorang developer yang berpengalaman tidak mau asal beri jawaban, terlalu murah jadi rugi, terlalu mahal pemesan lari/rugi. Sementara itu menyesuaikan harga layanan dengan kualitas software yang dihasilkan juga bukan merupakan solusi karena bisa merusak reputasi baik developer maupun pemesan aplikasi.

Setelah kalkulasi hal-hal tersebut, maka developer akan mengkalkulasi sumber daya  dan waktu yang dibutuhkan untuk menyelesaikan pekerjaan.

Software development adalah jenis pekerjaan penawaran jasa. Semua pekerjaan jasa erat kaitannya dengan sumber daya manusia.

Sebagai analogi yang relatif cocok dan dapat dipahami semua orang adalah pekerjaan membangun rumah. Dalam pekerjaan jasa membangun rumah, ada banyak tukang yang terlibat. Komponen harga utama dari jasa pembangunan rumah adalah upah harian.

Jadi, sangat tidak mungkin jika membuat website perusahaan yang waktu pengerjaan selama 30 hari dibayar 3 juta. Ini artinya membayar developer 100.000 IDR/hari. Bayangkan jika developernya tinggal di Jakarta, ini tidak mencukupi biaya hidup minimum di Jakarta. Dapat dipastikan software developernya bulan depan sudah ngutang alias rugi.

Selain faktor sumber daya manusia, development sangat erat juga kaitannya dengan waktu. Saya membagi 2 kategori hubungan antara sumber daya manusia dan upah per satuan waktu:
1. Developer yang berpengalaman, upah satuan waktu mahal.
2. Developer yang belum berpengalaman, upah satuan waktu relatif murah.

Jika kita ambil persamaan harga untuk developer yang berpengalaman dan developer yang tidak berpengalaman, maka hasil akhir harga sebenarnya sama.

Kita mengambil contoh kasus pengerjaan website perusahaan:
Jika kita berikan kepada developer yang berpengalaman, dia sanggup mengerjakan dalam waktu 15 hari dengan upah harian 2 juta. Total biaya yang harus dibayarkan oleh perusahaan pemesan adalah 30 juta.
Sementara jika kita berikan kepada developer yang belum berpengalaman, dia mengerjakan dalam waktu 30 hari dengan upah harian 1 juta. Total biaya yang dibayarkan oleh perusahaan adalah sama, yaitu 30 juta.

Jadi, berapakah harga pembuatan aplikasi itu?


Dari tulisan diatas, kita dapat menarik kesimpulan bahwa pembuatan aplikasi itu tidak ada standar bakunya tetapi harga sangat erat kaitannya dengan waktu yang dibutuhkan.

Sebagai seseorang yang sedang mencari jasa pembuatan aplikasi, Anda sebaiknya sedikit menganalisa bisnis model aplikasi yang akan Anda buat dan usahakan mampu menakar harga. Ibarat seperti dalam lelang baik swasta atau pemerintah, ada istilah harga perkiraan sendiri (HPS). Istilah ini sangat lazim pada proyek lelang di pemerintahan. Sehingga dengan ini Anda dapat menakar apakah harga yang ditawarkan oleh developer mahal atau tidak.


Sebagai penutup, saya ingin menambahkan 2 hal yang sebaiknya disiapkan untuk keberhasilan aplikasi yang Anda pesan;

1. Deskripsi
Tentau Anda punya gambaran tentang aplikasi yang diinginkan. Gambaran ini bisa diceritakan kepada developer* atau dituliskan pada sebuah dokumen. Gambaran atau deskripsi inilah yang akan diterjemahkan oleh developer menjadi sebuah aplikasi.

2. Fitur
Salah satu kunci sukses dalam pengembangan aplikasi adalah terpenuhinya fitur-fitur yang diinginkan.
Sebagai pemesan, tentu saja Anda dapat menggambarkan fitur-fitur yang diinginkan dan harus ada dalam aplikasi.




------
*) Idealnya disini yang lebih kompeten adalah sistem analis. Tetapi untuk memudahkan bercerita dan mengambil sudut pandang dari seorang pemesan jasa development langsung kepada seorang developer.

Senin, 16 September 2019

Apa itu Blockchain dan Kenapa Anda Harus Mengetahui tentang Blockchain

Blockchain menjadi topik yang hangat diperbincangkan belakangan ini. Penerapan teknologi blockchain sebenarnya sudah ada sejak tahun 1991 oleh Stuart Haber and W. Scott Stornetta. Tetapi, teknologi blockchain relatif baru populer sekitar 10 tahun belakangan ini karena munculnya Bitcoin sejak tahun 2009.

Secara rancangan teknologi, blockchain dapat mengubah banyak industri seperti finansial, pembayaran, properti dan pemilihan suara. Blockchain termasuk teknologi yang fenomenal karena secara singkat dapat membuat banyak investor tertarik. Menurut tradeix.com, pada tahun 2016, lebih dari 280 juta USD perusahaan meletakkan investasinya pada teknologi blockchain.(1) Investor-investor besar pada teknologi blockchain diantaranya; Fidelty, IBM, JP Morgan dan belakangan adalah Facebook.

Salah satu penerapan teknologi blockchain adalah cryptocurrency dan pembayaran. Dikutip dari techjury.net dan Nividous statistik memperlihatkan bahwa volume transaksi pada sektor crypto currency dan pembayaran ini mencapai 270 miliar USD. Dan sejak tahun 2010, teknologi blockchain telah mampu melampaui Western Union dalam hal pengiriman uang secara online.(2)

Lebih lanjut menurut interestingengineering.com, blockhain adalah salah satu trend yang perlu dipantau pada tahun 2019.

Dari statistik diatas, mungkin kiranya Anda patut untuk mengenal atau mengetahui lebih jauh tentang teknologi blockchain.


Jadi, apa itu blockchain?


Dalam istilah sederhana, blockchain adalah sebuah teknik penyimpanan data yang datanya satu sama lain terhubung dengan kriptografi, tidak bisa diubah, tidak bisa dipalsukan, transparan, mempunyai penanda waktu, terdistribusi dan mempunyai aturan tertentu (konsensus) yang dipatuhi oleh penggunanya.

Dengan keunggulan dan konsep dasar tersebut, para pengembang teknologi, investor dan pengguna yang haus akan penerapan teknologi baru berlomba-lomba untuk berpartisipasi dalam teknologi ini.

Investor, pengembang dan pengguna melihat teknologi ini dapat berdaya saing pada masa yang akan datang sehingga. Dikutip dari statista.com, pengguna wallet cryptocurrency di dunia sampai saat ini sudah mencapai 40 juta wallet.(3)

Jumlah pengguna wallet blockchain 2016 - 2019 (statista.com)



Blockchain dan Bitcoin serupa, tapi tidak sama


Tidak dipungkiri, teknologi blockchain populer karena Bitcoin sehingga banyak orang mengira bahwa Bitcoin adalah blockchain.

Untuk mengenal perbedaan dari blockchain dan bitcoin ini, saya membuatkan sebuah tabel perbandingan seperti berikut;


Bitcoin Blockchain
Pengertian Sebuah cryptocurrency yang menggunakan teknologi blockchain Sebuah teknik penyimpanan data yang datanya satu sama lain terhubung dengan kriptografi, tidak bisa diubah, tidak bisa dipalsukan
Fungsi Utama Sebagai alat pembayaran dan bekerja tanpa kontrol terpusat Secara konsep, blockchain dapat digunakan untuk apa saja
Apakah digunakan untuk perdagangan? Ya Karena merupakan sebuah teknologi, blockchain tidak terbatas untuk perdangangan saja
Apakah mempunyai fluktuasi harga? Ya Tidak


Jadi dapat ditarik kesimpulan, Bitcoin dan blockchain itu serupa, tetapi tidak sama. Blockchain adalah teknologi yang menggerakkan Bitcoin.


Teknologi blockchain digunakan untuk apa saja?

Keuangan

Teknologi blockchain mampu menciptakan cara yang aman dalam penyimpanan nilai. Teknologi blockchain juga mampu mengeliminasi pihak tengah dalam transaksinya sehingga digunakan sebagai alat tukar atau yang lebih familiar dengan istilah crypto currency. 

Properti

Bisnis properti adalah bisnis yang sangat besar. Banyak praktek-praktek jahat digunakan oleh berbagai macam pihak untuk menarik keuntungan dengan cara-cara yang tidak baik. Salah satu cara yang paling populer digunakan pada bisnis ini adalah pemalsuan dokumen. 

Pada teknologi blockchain, data-data yang disimpan didalamnya dipastikan tidak dapat dipalsukan. Data-data yang ada dalam blockchain hanya akan berpindah jika ada entitas yang berhak menggerakkanya. Sehingga, pada bisnis ini blockhain dapat dijadikan sebagai alat pencatatan kepemilikan properti. 

Supply chain management

Pemalsuan produk pada industri global merugikan bisnis milyaran dollar setiap tahunnya. 

Dengan karakteristik blockchain yang historynya saling terhubung dan tidak dapat dipalsukan, maka teknologi blockchain dapat mengatasi masalah ini. 

Pemilihan

Pemilihan baik itu untuk memilih kepala negara maupun sampai pemilihan ketua sebuah organisasi kadang-kadang berjalan dengan tidak baik. Pada organisasi yang korup, kita akan banyak menemui praktek yang tidak benar. 

Dengan karakteristik blockchain yang transparan dan hanya satu entitas yang mampu memindahkan data (satu key untuk satu surat suara), persoalan ini dapat diatasi. 

Kesimpulan

Blockchain adalah teknologi yang sangat menarik. Penerapan teknologi blockchain tidak hanya sebatas empat kategori diatas. Konsep-konsep dasar blockhain membuat blockchain akan banyak diadopsi penerapannya pada masa yang akan datang.

Sumber:
(1) https://tradeix.com/essential-blockchain-technology-concepts/
(2) https://techjury.net/stats-about/blockchain/
(3) https://www.statista.com/statistics/647374/worldwide-blockchain-wallet-users/

Backup Semua Database PostgreSQL dalam Container

Langkah 1: Identifikasi Container PostgreSQL Gunakan perintah docker ps untuk menemukan container PostgreSQL: docker ps Cata...