tag:blogger.com,1999:blog-3678957405245079162024-02-07T09:28:07.357+07:00Nitza Alfinas-nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.comBlogger77125tag:blogger.com,1999:blog-367895740524507916.post-8815668315277223232023-11-12T05:53:00.003+07:002023-11-12T05:53:45.520+07:00Cara Mengetahui Besar Database PostgreSQL Tanpa Mendownloadnya<div>Berikut adalah langkah-langkah untuk mengetahui ukuran semua database di instance PostgreSQL yang berjalan di dalam kontainer Docker:</div><div><br /></div><div>1. Mengakses Kontainer Docker:</div><div> 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:</div><div><br /></div><div> ```</div><div> docker exec -it [container_name_or_id] bash</div><div> ```</div><div><br /></div><div>2. Menghubungkan ke PostgreSQL:</div><div> 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:</div><div><br /></div><div> ```</div><div> psql -U postgres</div><div> ```</div><div><br /></div><div>3. Melihat Besar Semua Database:</div><div> Setelah berada dalam `psql`, eksekusi query SQL berikut ini untuk mendapatkan ukuran setiap database di instance PostgreSQL:</div><div><br /></div><div> ```</div><div> SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;</div><div> ```</div><div><br /></div><div> Perintah ini akan mencantumkan semua database beserta ukurannya dalam format yang mudah dibaca (seperti MB atau GB).</div><div><br /></div><div>4. Opsional - Total Ukuran Semua Database:</div><div> Jika Anda tertarik untuk mengetahui total ukuran gabungan semua database, Anda dapat menggunakan perintah ini:</div><div><br /></div><div> ```</div><div> SELECT pg_size_pretty(SUM(pg_database_size(datname))) FROM pg_database;</div><div> ```</div><div><br /></div><div> Ini akan memberikan Kita satu ukuran kumulatif untuk semua database.</div><div><br /></div><div>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.</div>nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-82280126405934613562023-09-23T09:24:00.000+07:002023-09-23T09:24:25.887+07:00Menggunakan Artillery untuk Testing
<p>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.</p>
<h2>Apa itu Artillery?</h2>
<p>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.</p>
<h2>Mengapa Menggunakan Artillery?</h2>
<ol>
<li><strong>Sederhana namun Kuat</strong>: Artillery memiliki konfigurasi yang sederhana dalam format YAML atau JSON, namun memiliki fitur yang kuat untuk menguji berbagai aspek aplikasi.</li>
<li><strong>Skalabilitas</strong>: Anda dapat menjalankan pengujian dari satu mesin atau mendistribusikannya ke banyak mesin untuk mensimulasikan ribuan pengguna.</li>
<li><strong>Statistik yang Detail</strong>: Setelah pengujian, Artillery memberikan laporan rinci mengenai latensi, throughput, jumlah kesalahan, dan metrik lainnya.</li>
<li><strong>Ekstensibilitas</strong>: Artillery dapat diextend dengan plugin untuk menambahkan fungsionalitas atau untuk mendukung protokol lain.</li>
</ol>
<h2>Bagaimana Cara Menggunakan Artillery?</h2>
<ol>
<li><strong>Instalasi</strong>
<p>Untuk memulai, Anda perlu menginstal Artillery. Dengan asumsi Anda telah menginstal Node.js, Anda dapat menginstal Artillery dengan npm:</p>
<pre><code>npm install -g artillery</code></pre>
</li>
<li><strong>Membuat Skenario Pengujian</strong>
<p>Buat file konfigurasi dalam format YAML atau JSON. Sebagai contoh:</p>
<pre><code>
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'
</code></pre>
<p>Dalam konfigurasi di atas, Artillery akan mengirimkan 5 permintaan per detik ke <code>http://your-api-endpoint.com/endpoint</code> selama 60 detik.</p>
</li>
<li><strong>Jalankan Pengujian</strong>
<p>Setelah Anda memiliki file konfigurasi, Anda dapat menjalankan pengujian dengan perintah:</p>
<pre><code>artillery run namafilekonfigurasi.yml</code></pre>
</li>
<li><strong>Menganalisis Hasil</strong>
<p>Setelah pengujian selesai, Artillery akan menampilkan ringkasan statistik. Anda juga dapat menyimpan hasil pengujian ke file atau database untuk analisis lebih lanjut.</p>
</li>
</ol>
<h2>Kesimpulan</h2>
<p>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.</p>
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-51437100796006375322023-09-04T09:09:00.008+07:002023-09-04T09:17:31.293+07:00Cara mengambil public key dari transaksi Ethereum<p>Pada saat pembuatan address pada walet Metamask atau wallet web3 lainnya, public key selalu tidak ditampilkan walaupun sebenarnya sudah dibuat. </p><p>Ini menjadi masalah tersendiri jika kita ingin memanfaatkan key ini untuk percakapan dengan enkripsi asimetri.</p><p>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;</p><p>1. Mendapatkan Public Key</p><p>Setelah private key di generate. artinya kita juga memiliki asosiasi dengan public key. Public key disini dinamakan dengan Public ECDSA Key</p><p>Public key ini dimasukkan kedalam fungsi keccak-256(public key)</p><p>2. Dimasukkan kedalam fungsi Keccak-256 hash</p><p>3. Mengambil 20 bytes terakhir</p><p>Untuk mengenerate secara online, Anda dapat mencoba pada link berikut: <a href="https://www.rfctools.com/ethereum-address-test-tool/">https://www.rfctools.com/ethereum-address-test-tool/</a></p><p>Harap berhati-hati, jangan pernah memasukkan private key Anda.</p><p><br /></p><p>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</p><p>Berikut adalah codenya;</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><div style="line-height: 18px;"><span style="color: #569cd6;">import Web3 from <span style="color: #ce9178;">'web3'</span>;</span></div><div style="line-height: 18px;"><span style="color: #569cd6;">import Cookie from <span style="color: #ce9178;">"js-cookie"</span>;</span></div><div style="line-height: 18px;"><span style="color: #569cd6;">import</span> { fromRpcSig, hashPersonalMessage, ecrecover, pubToAddress } <span style="color: #569cd6;">from</span> <span style="color: #ce9178;">'ethereumjs-util'</span>;</div></div><div><br /></div><div> <span style="color: #569cd6;">var</span> web3;</div><div> <span style="color: #569cd6;">if</span> (window.ethereum) {</div><div> web3 = <span style="color: #569cd6;">new</span> Web3(window.ethereum);</div><div> } else {</div><div> web3 = <span style="color: #569cd6;">new</span> Web3(window.ethProvider);</div><div> }</div><div> <span style="color: #6a9955;">// The message you want to sign</span></div><div> const message = <span style="color: #ce9178;">'I want to get my public key'</span>;</div><br /><div> <span style="color: #6a9955;">// Get the user's connected Ethereum address</span></div><div> const userAddress = Cookie.get(<span style="color: #ce9178;">"connectedAddress"</span>);</div><br /><div> try {</div><div> <span style="color: #6a9955;">// Sign the message using Metamask</span></div><div> <span style="color: #569cd6;">const</span> signature = <span style="color: #569cd6;">await</span> web3.eth.personal.sign(message, userAddress);</div><br /><div> <span style="color: #6a9955;">// Ensure the input is a Buffer</span></div><div> <span style="color: #569cd6;">const</span> signatureBuffer = Buffer.from(signature.slice(<span style="color: #b5cea8;">2</span>), <span style="color: #ce9178;">'hex'</span>); <span style="color: #6a9955;">// Remove the '0x' prefix</span></div><br /><div> <span style="color: #6a9955;">// Extract the components from the signature</span></div><div> <span style="color: #569cd6;">const</span> { v, r, s } = fromRpcSig(signatureBuffer);</div><br /><div> <span style="color: #6a9955;">// Calculate the message hash</span></div><div> <span style="color: #569cd6;">const</span> messageHash = hashPersonalMessage(Buffer.from(message));</div><br /><div> <span style="color: #6a9955;">// Recover the public key</span></div><div> <span style="color: #569cd6;">const</span> publicKey = ecrecover(messageHash, v, r, s);</div><br /><div> <span style="color: #6a9955;">// Convert the publicKey to a hexadecimal string</span></div><div><span style="color: #6a9955;"> // (this line just to make sure the public key in hex format)</span></div><div> <span style="color: #569cd6;">const</span> publicKeyHex = <span style="color: #ce9178;">'0x'</span> + publicKey.toString(<span style="color: #ce9178;">'hex'</span>);</div><div> console.log(<span style="color: #ce9178;">`Public Key (Hex): </span><span style="color: #569cd6;">${</span>publicKeyHex<span style="color: #569cd6;">}</span><span style="color: #ce9178;">`</span>);</div><br /><div> <span style="color: #6a9955;">// Convert the public key to an Ethereum address</span></div><div> <span style="color: #569cd6;">const</span> recoveredAddress = <span style="color: #ce9178;">'0x'</span> + pubToAddress(publicKey).toString(<span style="color: #ce9178;">'hex'</span>);</div><br /><div> console.log(<span style="color: #ce9178;">`Recovered Address: </span><span style="color: #569cd6;">${</span>recoveredAddress<span style="color: #569cd6;">}</span><span style="color: #ce9178;">`</span>);</div><br /><div> } catch (error) {</div><div> console.error(<span style="color: #ce9178;">'Error:'</span>, error);</div><div> }</div></div><p>Pada code diatas, kita menggunakan web3 wallet Metamask. Disini kita menghindari meg-ekspose private key. </p><p>Strategi yang digunakan adalah;</p><p>1. Menandatangani sebuah pesan. </p><p>2. Meng-ekstrak v, r dan s</p><p>3. Membuat message hash</p><p>4. Merecover public key dengan function ecrecover dan memasukkan nilai message hash, v, r dan s</p><p>5. Mengambil address dengan function pubToAddress</p><p>Untuk memastikan public key yang Anda convert kepada Address adalah benar, Anda dapat melakukan test sekali lagi dengan mengambil public key dari baris `<span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">console.log(</span><span style="color: #ce9178; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">`Public Key (Hex): </span><span style="color: #569cd6; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">${</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">publicKeyHex</span><span style="color: #569cd6; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">}</span><span style="color: #ce9178; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">`</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">);</span>` dan memasukkannya pada public key ECDSA pada link <a href="https://www.rfctools.com/ethereum-address-test-tool/">https://www.rfctools.com/ethereum-address-test-tool/</a></p><p><br /></p><p><br /></p>nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-89169256980347566602021-08-19T19:17:00.000+07:002021-08-19T19:17:16.514+07:00Apa itu blockchain<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXAgI349eu9txKAOZiCvOj5f0I5pBt_VcmMjTa1Kd-zJWUTy2wBgyYRYzGH6TWdhKcLtlY_b_COO7TSMjFLgmYQSzZ22h9Htj3FKCLwrb1eoUxngNkj6aRRA5I9Sn4VvoEyBHSBorkjosS/s1398/Screen+Shot+2021-08-19+at+19.15.46.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="882" data-original-width="1398" height="405" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXAgI349eu9txKAOZiCvOj5f0I5pBt_VcmMjTa1Kd-zJWUTy2wBgyYRYzGH6TWdhKcLtlY_b_COO7TSMjFLgmYQSzZ22h9Htj3FKCLwrb1eoUxngNkj6aRRA5I9Sn4VvoEyBHSBorkjosS/w640-h405/Screen+Shot+2021-08-19+at+19.15.46.png" width="640" /></a></div><br /><span style="font-family: Arial; font-size: 11pt; white-space: pre-wrap;"><br /></span><p></p><p><span style="font-family: Arial; font-size: 11pt; white-space: pre-wrap;">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.</span></p><span id="docs-internal-guid-8ff5138e-7fff-cdff-03c0-e64b3588b5ee"><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Kenapa Blockchain itu penting?</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">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. </span></p><br /><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Apa saja yang bisa dicatat didalam blockchain?</span></p><br /><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Pada dasarnya blockchain dapat mencatat aset </span><span style="font-family: Arial; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">tangible</span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;"> atau berwujud seperti; rumah, mobil, uang tunai, tanah, kepemilikan saham dan lain-lain. </span></p><p dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Selain itu aset tak berwujud seperti; kekayaan intelektual, paten, hak cipta, merek dan lain-lain.</span></p><br /><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Apakah ada pertanyaan tentang blockchain? </span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;">Apakah bisnis Anda cocok atau kedepan harus menggunakan blockchain?</span></span>nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-34373058709660873622019-11-07T10:18:00.000+07:002019-11-07T19:46:53.813+07:00Berapa 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.<br />
<br />
Untuk lebih mudah dalam tulisan ini, sofware, aplikasi web atau aplikasi mobile kita sebut sebagai aplikasi saja.<br />
<br />
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.<br />
<br />
Mari kita kembali lagi dan membuat pertanyaan yang lebih spesifik. Misalnya; <b>Berapakah harga untuk membuat aplikasi seperti Bukalapak?</b><br />
<br />
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.<br />
<br />
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.<br />
<br />
Setelah kalkulasi hal-hal tersebut, maka developer akan mengkalkulasi sumber daya dan waktu yang dibutuhkan untuk menyelesaikan pekerjaan.<br />
<br />
Software development adalah jenis pekerjaan penawaran jasa. Semua pekerjaan jasa erat kaitannya dengan sumber daya manusia.<br />
<br />
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.<br />
<br />
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.<br />
<br />
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:<br />
1. Developer yang berpengalaman, upah satuan waktu mahal.<br />
2. Developer yang belum berpengalaman, upah satuan waktu relatif murah.<br />
<br />
Jika kita ambil persamaan harga untuk developer yang berpengalaman dan developer yang tidak berpengalaman, maka hasil akhir harga sebenarnya sama.<br />
<br />
Kita mengambil contoh kasus pengerjaan website perusahaan:<br />
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.<br />
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.<br />
<br />
<h3>
Jadi, berapakah harga pembuatan aplikasi itu?</h3>
<br />
Dari tulisan diatas, kita dapat menarik kesimpulan bahwa pembuatan aplikasi itu tidak ada standar bakunya tetapi harga sangat erat kaitannya dengan waktu yang dibutuhkan.<br />
<br />
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.<br />
<br />
<br />
Sebagai penutup, saya ingin menambahkan 2 hal yang sebaiknya disiapkan untuk keberhasilan aplikasi yang Anda pesan;<br />
<br />
1. Deskripsi<br />
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.<br />
<br />
2. Fitur<br />
Salah satu kunci sukses dalam pengembangan aplikasi adalah terpenuhinya fitur-fitur yang diinginkan.<br />
Sebagai pemesan, tentu saja Anda dapat menggambarkan fitur-fitur yang diinginkan dan harus ada dalam aplikasi.<br />
<br />
<h3>
<br /></h3>
<br />
<br />
------<br />
*) 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.<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-86862562784771806212019-09-16T20:45:00.001+07:002019-09-16T20:45:28.928+07:00Apa itu Blockchain dan Kenapa Anda Harus Mengetahui tentang Blockchain<div style="text-align: justify;">
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.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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.
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lebih lanjut menurut interestingengineering.com, blockhain adalah salah satu trend yang perlu dipantau pada tahun 2019.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dari statistik diatas, mungkin kiranya Anda patut untuk mengenal atau mengetahui lebih jauh tentang teknologi blockchain.
</div>
<br />
<br />
<h3>
Jadi, apa itu blockchain?
</h3>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
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.</div>
<br />
<div style="text-align: justify;">
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)</div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlFhvpwypVF7xLU6oZZHa1r3t3oEc1luQOL1u-nNcfBwv7TyH9m6qy7L964mMpineKCcdtmxq3h3iMMnie0iaWF9E4SUrgte4Uzy-vxlEKABwZ1oaO4Wj6yhiUSEX-FYXydaCcsEVjAHl5/s1600/Screen+Shot+2019-09-16+at+14.13.50.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="458" data-original-width="704" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlFhvpwypVF7xLU6oZZHa1r3t3oEc1luQOL1u-nNcfBwv7TyH9m6qy7L964mMpineKCcdtmxq3h3iMMnie0iaWF9E4SUrgte4Uzy-vxlEKABwZ1oaO4Wj6yhiUSEX-FYXydaCcsEVjAHl5/s320/Screen+Shot+2019-09-16+at+14.13.50.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 12.800000190734863px;">Jumlah pengguna wallet blockchain 2016 - 2019 (statista.com)</td></tr>
</tbody></table>
<br />
<div style="text-align: justify;">
<br /></div>
<br />
<h3>
Blockchain dan Bitcoin serupa, tapi tidak sama</h3>
<br />
<div style="text-align: justify;">
Tidak dipungkiri, teknologi blockchain populer karena Bitcoin sehingga banyak orang mengira bahwa Bitcoin adalah blockchain.</div>
<br />
<div style="text-align: justify;">
Untuk mengenal perbedaan dari blockchain dan bitcoin ini, saya membuatkan sebuah tabel perbandingan seperti berikut;</div>
<br />
<br />
<table border="1" cellpadding="8">
<thead>
<tr>
<th></th>
<td>Bitcoin</td>
<td>Blockchain</td>
</tr>
</thead>
<tbody>
<tr>
<td>Pengertian</td>
<td>Sebuah cryptocurrency yang menggunakan teknologi blockchain</td>
<td>Sebuah teknik penyimpanan data yang datanya satu sama lain terhubung dengan kriptografi, tidak bisa diubah, tidak bisa dipalsukan</td>
</tr>
<tr>
<td>Fungsi Utama</td>
<td>Sebagai alat pembayaran dan bekerja tanpa kontrol terpusat</td>
<td>Secara konsep, blockchain dapat digunakan untuk apa saja</td>
</tr>
<tr>
<td>Apakah digunakan untuk perdagangan?</td>
<td>Ya</td>
<td>Karena merupakan sebuah teknologi, blockchain tidak terbatas untuk perdangangan saja</td>
</tr>
<tr>
<td>Apakah mempunyai fluktuasi harga?</td>
<td>Ya</td>
<td>Tidak</td>
</tr>
</tbody></table>
<br />
<br />
<span style="text-align: justify;">Jadi dapat ditarik kesimpulan, Bitcoin dan blockchain itu serupa, tetapi tidak sama. Blockchain adalah teknologi yang menggerakkan Bitcoin.</span><br />
<div style="text-align: justify;">
<br />
<br /></div>
<h3>
Teknologi blockchain digunakan untuk apa saja?</h3>
<h4>
Keuangan</h4>
<div style="text-align: justify;">
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. </div>
<h4>
Properti</h4>
<div style="text-align: justify;">
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. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
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. </div>
<h4>
Supply chain management</h4>
<div style="text-align: justify;">
Pemalsuan produk pada industri global merugikan bisnis milyaran dollar setiap tahunnya. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dengan karakteristik blockchain yang historynya saling terhubung dan tidak dapat dipalsukan, maka teknologi blockchain dapat mengatasi masalah ini. </div>
<br />
<b>Pemilihan</b><br />
<br />
<div style="text-align: justify;">
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. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Dengan karakteristik blockchain yang transparan dan hanya satu entitas yang mampu memindahkan data (satu key untuk satu surat suara), persoalan ini dapat diatasi. </div>
<div style="text-align: justify;">
<br /></div>
<h3>
Kesimpulan</h3>
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.<br />
<br />
Sumber:<br />
(1) https://tradeix.com/essential-blockchain-technology-concepts/<br />
(2) https://techjury.net/stats-about/blockchain/<br />
(3) https://www.statista.com/statistics/647374/worldwide-blockchain-wallet-users/nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-52546917653601152362019-08-29T19:51:00.001+07:002019-08-29T20:06:08.952+07:00Cara Instal OpenVPN pada Ubuntu 18.04<b>1. BAGIAN SERVER</b><br />
<br />
1.1. Update system<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt update</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt upgrade</span><br />
<br />
1.2. Buat direktori supaya supaya mudah mengelompokkan pekerjaan<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ mkdir openvpn</span><br />
<br />
1.3. Download menggunakan perintah wget<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ wget https://git.io/vpn -O openvpn-install.sh</span><br />
<br />
1.4. Instal<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo bash openvpn-install.sh</span><br />
<br />
Ikuti perintahnya seperti berikut<br />
<span style="font-family: "courier new" , "courier" , monospace;">Welcome to this OpenVPN "road warrior" installer!</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">I need to ask you a few questions before starting the setup.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">You can leave the default options and just press enter if you are ok with them.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">First, provide the IPv4 address of the network interface you want OpenVPN</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">listening to.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">IP address: <span style="color: red;">157.23.3.8</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">Which protocol do you want for OpenVPN connections?</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 1) UDP (recommended)</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 2) TCP</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Protocol [1-2]: <span style="color: red;">1</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">What port do you want OpenVPN listening to?</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Port: <span style="color: red;">1194</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">Which DNS do you want to use with the VPN?</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 1) Current system resolvers</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 2) 1.1.1.1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 3) Google</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 4) OpenDNS</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> 5) Verisign</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">DNS [1-5]: <span style="color: red;">3</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">Finally, tell me your name for the client certificate.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Please, use one word only, no special characters.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Client name: <span style="color: red;">myopenvpnclient</span></span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">Okay, that was all I needed. We are ready to set up your OpenVPN server now.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Press any key to continue...</span><br />
<br />
Catatan tambahan:<br />
- Untuk pemilihan DNS, selalu pilih 1.1.1.1 atau Google karena koneksi dengan Google atau 1.1.1.1 selalu dapat diakses darimana saja.<br />
- Jika server VPN Anda dilindungi oleh Firewall, maka perlu diaktifkan port 1194 agar dapat diakses darimana saja.<br />
<br />
1.5. Jalankan service<br />
Untuk dapat menjalankan service walaupun server di restart, maka jalankan perintah<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo systemctl enable openvpn.service</span><br />
<br />
Untuk menjalakan service<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo systemctl start openvpn.service</span><br />
<br />
Sama seperti perintah systemctl lainnya, Anda dapat mengetikkan perintah; status, restart, stop<br />
<br />
<br />
1.6. Pindahkan hasil konfigurasi yang dihasilkan<br />
Biasanya, file konfigurasi akan diletakkan pada /home/username/namafile.ovpn<br />
Maka, untuk dapat dikelompokkan sehingga kita tidak mencari-cari file konfigurasi ini dikemudian hari, maka letakkan pada folder yang telah kita buat diata /home/username/openvpn<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo mv /home/username/<span style="caret-color: rgb(255, 0, 0);">myopenvpnclient.ovpn /home/username/openvpn/</span><span style="caret-color: rgb(255, 0, 0);">myopenvpnclient.ovpn</span></span><br />
<br />
1.7. Pindahkan kepemilikan sehingga bisa di download<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo chown username:username <span style="caret-color: rgb(255, 0, 0);">myopenvpnclient.ovpn</span></span><br />
<br />
1.8. Download file tersebut menggunakan Filezilla atau perintah SCP<br />
<br />
<b><br /></b>
<b>2. BAGIAN CLIENT</b><br />
<br />
2.1. Client untuk Mac, Windows, IOS dan Android<br />
Untuk client cukup mudah, Anda hanya perlu install openvpn client:<br />
1. Mac <a href="https://tunnelblick.net/">https://tunnelblick.net</a><br />
2. Windows <a href="https://openvpn.net/community-downloads/">https://openvpn.net/community-downloads/</a><br />
3. IOS <a href="https://apps.apple.com/us/app/openvpn-connect/id590379981">https://apps.apple.com/us/app/openvpn-connect/id590379981</a><br />
Untuk memasukkan file konfigurasi dengan ekstensi .ovpn kedalam IPhone, bisa melalui email dan itunes. Tetapi ada cara yang lebih praktis jika Anda adalah pengguna Mac, cukup hanya dengna menggunakan Airdrop untuk menginstal konfigurasinya kedalam IPhone<br />
4. Android <a href="https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en">https://play.google.com/store/apps/details?id=net.openvpn.openvpn&hl=en</a><br />
<br />
2.2. Client untuk Ubuntu 18.04<br />
2.2.1. Install OpenVPN<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt install openvpn</span><br />
<br />
2.2.2. Download file konfigurasi pada OpenVPN server dan jadikan sebagai file konfigurasi pada client<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo cp <span style="caret-color: rgb(255, 0, 0);">myopenvpnclient.ovpn</span> /etc/openvpn/client.conf</span><br />
<br />
2.2.3. Jalankan client<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo openvpn --client --config /etc/openvpn/client.conf</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
OK, Selamat! sekarang Anda sudah dapat menggunakan VPN.nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-81473424924948640812019-08-24T08:10:00.000+07:002019-08-24T08:12:05.261+07:00Terungkap, Beginilah Cara Membuat Module NodeJS Berjalan pada Client Side (Browser)Haha... lupakan soal judul. Ini nge-blog malas-malasan. Lihat saja, tampilan blog-nya berantakan.<br />
<br />
Tanpa basa-basi, mari kita mulai saja...<br />
<br />
NodeJS runtime tidak berjalan pada client side. Tetapi pada dasarnya NodeJS menggunakan JavaScript.<br />
<br />
Module-module NodeJS ini sangat banyak dan bagus, tetapi lagi... dia tidak dapat dijalankan melalui client side.<br />
<br />
Tetapi lagi dan lagi... untungnya ada module NodeJS yang bernama browserify. Module ini dapat membuat module NodeJS lainnya berjalan pada browser.<br />
<br />
<a href="http://browserify.org/" target="_blank">Klik disini</a> untuk melihat lebih lengkap tentang browserify.org<br />
<br />
Mari ikuti langkah-langkahnya:<br />
<br />
1. Install Browserify<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ npm install -g browserify</span><br />
<br />
2. Buat module untuk diconvert<br />
Ide untuk aplikasi ini sangat sederhana, yaitu meng-convert string kedalam base64 menggunakan module base64.<br />
<br />
2.1. Buat folder<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ mkdir appbase64</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd appbase64</span><br />
<br />
2.2. Install base64<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ npm install base-64</span><br />
<br />
2.3. Convert module base64 dengan browserify<br />
<br />
2.3.1. Buat file untuk di convert<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ vim index.js</span><br />
Kode diatas menggunakan Vim. Tetapi Anda boleh mengganti sesuai editor favorit Anda.<br />
<br />
2.3.2. Isikan baris berikut kedalam index.js<br />
<span style="font-family: "courier new" , "courier" , monospace;">var base64 = require('base-64');</span><br />
<br />
<b>2.3.3. Convert menggunakan browserify</b><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ browserify index.js -o baseme.js</span><br />
<br />
2.3.4. Ganti code sedikit supaya dapat digunakan pada browser;<br />
Pada dasarnya hasil convert terlihat seperti berikut:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp4A5PLtQiXO80VrEdQWZ72M45G8OR8h-qbJdqRQVlQINR3cT3OES0cOm5zSwA0MUkfHVnhow9y6E8al6Pgy5mVciGUGMIi3blRjtoj-f3QDwk7gFv0peSkdoICvzEqM7e3g9zQtzksbHc/s1600/Screen+Shot+2019-08-24+at+07.56.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="1136" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp4A5PLtQiXO80VrEdQWZ72M45G8OR8h-qbJdqRQVlQINR3cT3OES0cOm5zSwA0MUkfHVnhow9y6E8al6Pgy5mVciGUGMIi3blRjtoj-f3QDwk7gFv0peSkdoICvzEqM7e3g9zQtzksbHc/s320/Screen+Shot+2019-08-24+at+07.56.01.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Variabel base64 pada code tersebut tidak dapat digunakan diluar function. </div>
<div class="separator" style="clear: both; text-align: justify;">
Untuk dapat menggunakannya, kita harus membuat variabel global.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Masukkan baris ini paling atas;</div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">var base64;</span> </div>
<div class="separator" style="clear: both; text-align: justify;">
Dan hilangkan var pada baris ke 3 sehingga menjadi seperti ini:</div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;">base64 = require('base-64');</span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Kode akan terlihat seperti gambar berikut:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuo38VpbEdnWcH3AfzAzR0uo-HN5ksg-2PF10MRdhECC01BeQHiachya5Cxx7IXWiQjaTM5lX08-2cBJKD4sqUNlOFSAXFzXtZEyeFqIRErLPfV_BGUmktVrK1C5I1ODUNyntCT1jOSGlM/s1600/Screen+Shot+2019-08-24+at+07.58.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="528" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuo38VpbEdnWcH3AfzAzR0uo-HN5ksg-2PF10MRdhECC01BeQHiachya5Cxx7IXWiQjaTM5lX08-2cBJKD4sqUNlOFSAXFzXtZEyeFqIRErLPfV_BGUmktVrK1C5I1ODUNyntCT1jOSGlM/s320/Screen+Shot+2019-08-24+at+07.58.42.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
3. Buat aplikasi web</div>
<div class="separator" style="clear: both; text-align: justify;">
Buat file index.html dengan editor favorit Anda dan masukkan code berikut:</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><!DOCTYPE html></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><html></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><head></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><title>Page Title</title></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><script src="baseme.js" type="text/javascript" ></script></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"></head></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><body></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><h1>My First Heading</h1></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><p>My first paragraph.</p></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"></body></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "courier new" , "courier" , monospace;"></html></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
4. Uji dengan developer console pada browser;<br />
Terlihat seperti berikut:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6juO68giqUmnaCThGfkWHNowOxOdagXPLvJFQsolcG07-i5x6DQOQx2qB2baf4o9WkYwInV1EhkJR0Fuhfx8P1nhZg9pu7VyIWgh0-kmZYhCfEzM5Coj-xL5kvDIlXpYq1h6Fy6JlDVbo/s1600/Screen+Shot+2019-08-24+at+08.05.52.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="210" data-original-width="389" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6juO68giqUmnaCThGfkWHNowOxOdagXPLvJFQsolcG07-i5x6DQOQx2qB2baf4o9WkYwInV1EhkJR0Fuhfx8P1nhZg9pu7VyIWgh0-kmZYhCfEzM5Coj-xL5kvDIlXpYq1h6Fy6JlDVbo/s320/Screen+Shot+2019-08-24+at+08.05.52.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Selesai... Semoga bermanfaat :)</div>
<br />
<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-20085624294794507022019-08-08T15:47:00.001+07:002019-08-08T18:29:56.257+07:00Compile Bitcoin pada Ubuntu 18.04 Langsung dari SourcenyaAda salah satu faktor penting yang perlu diingat dari internet dan khususunya Bitcoin, yaitu: banyak scam dan banyak sumber yang sulit untuk dipercaya.<br />
<br />
Jadi, mengkompile Bitcoin sendiri mungkin salah satu hal yang perlu dilakukan untuk menhindari hal-hal yang tidak diinginkan.<br />
<br />
Pada tutorial kali ini, kita akan mengkompile Bitcoin pada mesin Ubuntu 18.04.<br />
<br />
<b>Langkah 1. Install Git</b><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt-get install git</span><br />
<br />
Anda bisa melewatkan bagian ini jika telah mempunyai GIT<br />
<br />
<br />
<b>Langkah 2. Clone Bitcoin langsung dari Github</b><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ git clone https://github.com/bitcoin/bitcoin.git</span><br />
<br />
<br />
<b>Langkah 3. Cek release dan checkout</b><br />
<br />
Bitcoin sampai saat ini sangat aktif dikembangkan. Strategi developmentnya langsung diletakkan pada branch master. Sehingga dengan ini, branch master bukan merupakan branch stable. Untuk itu, kita perlu cek release Bitcoin.<br />
<br />
Saat tulisan ini dibuat, Bitcoin Core 0.18.0 dengan commit 2472733<br />
<br />
Pindah ke direktori setelah clone<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd bitcoin</span><br />
<br />
Checkout Bitcoin Core 0.18.0<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ git checkout 2472733</span><br />
<br />
<br />
<b>Langkah 4. Install Dependensi</b><br />
<br />
4.1. Build essential untuk membolehkan software di compile dari sourcenya<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt-get install build-essential</span><br />
<br />
<br />
4.2. Install Berkeley Database<br />
<br />
Ubuntu 18.04 mempunyai Berkeley DB pada paketnya. Ini tidak kompatibel dengan persyaratan Bitcoin, sehingga kita harus men-install Berkeley DB sendiri.<br />
<br />
Sebelum menginstal, kita akan download menggunakan perintah <span style="font-family: "courier new" , "courier" , monospace;">wget</span> dan cek keaslian yang sudah kita download dengan <span style="font-family: "courier new" , "courier" , monospace;">sha256sum</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd ~</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256sum -c</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ tar -xvf db-4.8.30.NC.tar.gz</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd db-4.8.30.NC/build_unix</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ mkdir -p build</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ BDB_PREFIX=$(pwd)/build</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ ../dist/configure --disable-shared --enable-cxx --with-pic --prefix=$BDB_PREFIX</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ make install</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd ~</span><br />
<br />
<br />
4.3. Install dependensi lainnya<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo apt-get install autoconf libtool pkg-config libboost-all-dev libssl-dev libprotobuf-dev protobuf-compiler libevent-dev libqt4-dev libcanberra-gtk-module</span><br />
<br />
<br />
<b>Langkah 5. Compile Bitcoin Core</b><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ cd bitcoin</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ ./autogen.sh</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ ./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/" --with-gui</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">$ make</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: inherit;">Untuk ./configure, jika Anda hanya menjalankan bitcoin tanpa GUI, maka opsi --with-gui dapat dihilangkan sehingga perintahnya menjadi </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: "courier new", courier, monospace;">$ ./configure CPPFLAGS="-I${BDB_PREFIX}/include/ -O2" LDFLAGS="-L${BDB_PREFIX}/lib/"</span><br />
<br />
<b>Langkah 6. Menjalankan Bitcoin</b><br />
<br />
6.1. Menjalankan Bitcoin GUI<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ src/qt/bitcoin-qt</span><br />
<br />
6.2. Menjalankan daemon (tanpa GUI)<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ src/bitcoind</span><br />
<br />
<b>Langkah 7. Membuat Bitcoin dapat dijalankan secara global (pilihan)</b><br />
<br />
Dengan menjalankan ini, Bitcoin akan dapat dijalankan oleh setiap user yang terdaftar dalam sistem<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ sudo make install</span><br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-64364871435918750852019-08-07T15:21:00.001+07:002019-08-07T15:21:24.649+07:00Cara Install KVM pada Ubuntu 18.04KVM (Kernel-based Virtual Machine) adalah modul virtualisasi pada kernel Linux yang membolehkan fungsi <a href="https://en.wikipedia.org/wiki/Hypervisor" target="_blank">hypervisor</a>.(1) KVM sangat ringan dan membuat fungsi khusus untuk virtualisasi pada Intel VT dan AMD-V.<br />
<br />
Setiap menjalankan kvm, dia akan menjalankan modul kvm-intel.ko pada prosesor Intel dan kvm-amd.ko untuk prosesor AMD.<br />
<br />
Halaman resmi KVM dapat dilihat di https://www.linux-kvm.org/page/Main_Page<br />
<br />
Blog dari developer aktif untuk KVM dapat dilihat pada https://planet.virt-tools.org<br />
<br />
Untuk tidak lama-lama, berikut langkah-langkah instalasi KVM pada Ubuntu 18.04<br />
<br />
<b>Langkah 1. Verifikasi apakah system support atau tidak untuk KVM</b><br />
<br />
<code>
$ egrep -c '(vmx|svm)' /proc/cpuinfo
</code>
<br />
<br />
Jika outputnya lebih besar dari 1, maka komputer support KVM
<br />
<br />
Setelah itu, install aplikasi kvm-ok dengan command berikut:<br />
<br />
<code>$ sudo apt install cpu-checker
</code>
<br />
<br />
Verifikasi instalasi dengan command berikut:
<br />
<br />
<code>
$ sudo kvm-ok<br />
INFO: /dev/kvm exists<br />
KVM acceleration can be used
</code>
<br />
<br />
<br />
<b>Langkah 2. Install paket yang dibutuhkan oleh KVM</b><br />
<br />
<br />
<code>$ sudo apt update <br />
$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager
</code>
<br />
<br />
User yang melakukan instalasi ini juga akan dimasukkan kedalam group pengguna kvm (libvirtd) secara otomatis.<br />
<br />
<br />
<b>Langkah 3. Menjalankan servis libvirtd
</b><br />
<br />
Ketika aplikasi KVM diinstal, dia akan otomatis berjalan. Tetapi jika dia tidak otomatis berjalan, maka servisnya dapat dilihat dengan peritah berikut
<br />
<br />
<code>
$ sudo systemctl status libvirtd</code>
<br />
<br />
Jika tidak berjalan, perintah untuk membuat dia enable dan berjalan sama dengan perintah yang digunakan pada service Ubuntu 18.04 lainnya:
<br />
<br />
<code>
$ sudo systemctl daemon-reload<br />
$ sudo systemctl enable libvirtd<br />
$ sudo systemctl start libvirtd
</code>
<br />
<br />
<br />
<b>Langkah 4. Jalankan Virtual Machine Manager</b><br />
<b><br /></b>
Jalankan<br />
<br />
<code>
$ sudo virt-manager
</code>
<br />
<br />
File tersebut terlihat seperti berikut:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSlFIGuGnd45LdM6C7Z0XP5sgnVBfI9aezK44_dPnRDjBPY-fYM5D7DpDxNwxLX5OY6eshD1FG7kK3M-7GuBmTM4YKwliHQY6eN4mDTWGHTlTB_c4uJvNBp3xOod0dceLTr03zVxR_1QBx/s1600/Screen+Shot+2019-08-07+at+11.30.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1216" data-original-width="1174" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSlFIGuGnd45LdM6C7Z0XP5sgnVBfI9aezK44_dPnRDjBPY-fYM5D7DpDxNwxLX5OY6eshD1FG7kK3M-7GuBmTM4YKwliHQY6eN4mDTWGHTlTB_c4uJvNBp3xOod0dceLTr03zVxR_1QBx/s320/Screen+Shot+2019-08-07+at+11.30.58.png" width="308" /></a></div>
<br />
<br />
<b>Langkah 5. Buat Server</b><br />
<br />
Langkah ini cukup mudah;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP_v_GHQ2Yi81v9d2ijzmwkpdJyS5WmzE6bc64BZKgPB-XKArgrlAqb6icrRsbyA6fRs73-_j3hJ-cf-Yi_fIf6MXHv4ga-3548-qDFzAYdewan3SHfVIYAfwQdUshitzAA-5gS1jUv6h4/s1600/Screen+Shot+2019-08-07+at+11.34.14.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1210" data-original-width="1162" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjP_v_GHQ2Yi81v9d2ijzmwkpdJyS5WmzE6bc64BZKgPB-XKArgrlAqb6icrRsbyA6fRs73-_j3hJ-cf-Yi_fIf6MXHv4ga-3548-qDFzAYdewan3SHfVIYAfwQdUshitzAA-5gS1jUv6h4/s320/Screen+Shot+2019-08-07+at+11.34.14.png" width="307" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2A2R8p-6u0gZoTh11GasP4X0DPSKAonN8SrACR_X7PAnmJSoErA_lEWZ4iDkL4oI42mMkwBgrh1niMSvvB6vWiCBiNAmfyWJWwjQ_f3cQOc2RDyL2f7XT5lj_nPw6wqTJDPJbhBY8cOsJ/s1600/Screen+Shot+2019-08-07+at+11.35.37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1228" data-original-width="1522" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2A2R8p-6u0gZoTh11GasP4X0DPSKAonN8SrACR_X7PAnmJSoErA_lEWZ4iDkL4oI42mMkwBgrh1niMSvvB6vWiCBiNAmfyWJWwjQ_f3cQOc2RDyL2f7XT5lj_nPw6wqTJDPJbhBY8cOsJ/s320/Screen+Shot+2019-08-07+at+11.35.37.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDOipb42KakigmGKTFJq78UvWM-SSQBtvE3lvZvDNpPjB9jlVALMKU5447Gbmx81OchdjKSwEwMymLj6Kq8_1ESTMQyrY0QbAgfXaRKlisI8zlZL-S099m5qUV5iWdhK4Bf8ZbyNRs3Lt/s1600/Screen+Shot+2019-08-07+at+11.37.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1376" data-original-width="1278" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDOipb42KakigmGKTFJq78UvWM-SSQBtvE3lvZvDNpPjB9jlVALMKU5447Gbmx81OchdjKSwEwMymLj6Kq8_1ESTMQyrY0QbAgfXaRKlisI8zlZL-S099m5qUV5iWdhK4Bf8ZbyNRs3Lt/s320/Screen+Shot+2019-08-07+at+11.37.53.png" width="297" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTq1dHWp2eX3kjARHIOC-hpNn3uRqPkp5-HaGFB8WY33obcpmzYRQ9Xgzri2w4qlVu8y9lvEO2F9e3MH0SynRapH2YgSlqGbkv9V8gAIZP8WinMom8hzDHPotkeluvYcY7awGObpMVkNRx/s1600/Screen+Shot+2019-08-07+at+11.30.58.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1216" data-original-width="1174" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTq1dHWp2eX3kjARHIOC-hpNn3uRqPkp5-HaGFB8WY33obcpmzYRQ9Xgzri2w4qlVu8y9lvEO2F9e3MH0SynRapH2YgSlqGbkv9V8gAIZP8WinMom8hzDHPotkeluvYcY7awGObpMVkNRx/s320/Screen+Shot+2019-08-07+at+11.30.58.png" width="308" /></a></div>
<br />
<br />
Jika Anda mendapati langkah nomor 3 bermasalah, silahkan sesuaikan konfigurasi BIOS untuk enable Virtual Machine.<br />
<br />
<br />
<br />
<hr />
Sumber: <br />
1. https://en.wikipedia.org/wiki/Kernel-based_Virtual_Machinenitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-72750438647392075052019-04-08T11:17:00.002+07:002019-04-08T11:17:47.632+07:00Bermain enkripsi asimetrik dengan RSABoy<h2>
Internet, HTTP dan HTTPS</h2>
<br />
Internet erat kaitannya dengan kehidupan sehari-hari kita saat ini. Internet adalah sebuah sistem global yang saling terhubung yang biasanya menggunakan Transmission Control Protocol (TCP) / Internet Protocol (IP) untuk menghubungkan setiap perangkat.*<br />
<br />
Internet dapat juga dikatakan sebagai sebuah sarana untuk komunikasi. Dalam komunikasi, sudah pasti menyertakan data-data. Untuk memudahkan transfer data-data tersebut yang biasanya terjadi melalui browser, maka dibuat protokol Hypertext Transfer Protocol (HTTP) yang merupakan turunan dari TCP/IP. **<br />
<br />
Secara sederhana, HTTP ini mengatur komunikasi antara web browser dan web server. HTTP menggunakan clear text format. Penggunaan clear text format dalam mengirimkan data, tentu saja ini tidak aman. Jika saja ada orang yang berhasil meng-intercept pengiriman data ini, maka dia akan dapat melihat/menguasai data-data yang dikirimkan. Teknik intercept ini dalam dunia hacking biasanya disebut dengan Man in The Middle Attack.<br />
<br />
Untuk membuat komunikasi aman, maka dibuatlah protokol HTTPs dimana penambahan S adalah sigkatan dari secure dimana data-data yang dikirimkan sudah di enkripsi sehingga orang-orang yang mencoba mendapatkan data tersebut tidak akan dapat membaca data tersebut. Pada tempat lain, penerima data perlu men-dekrip data tersebut sehingga dapat menbaca informasi yang dikirimkan.<br />
<br />
Hampir semua proses tersebut diatas; enkripsi, dekripsi, kemanana komunikasi dinamakan dengan cryptografi.***<br />
<br />
<br />
<h2>
Enkripsi Simetrik dan Asimetrik</h2>
<br />
Sampai saat ini, ada 2 jenis enkripsi; simetrik dan asimetrik.<br />
<br />
Pada enkripsi simetrik, kata kunci yang digunakan untuk enkrip dan dekrip adalah sama. Sehingga penerima dan pengirim harus saling mengirimkan kata kuncinya.<br />
<br />
Pada enkripsi asimetrik, kata kunci yang digunakan tidak perlu dibagi kepada penerima. Begitu juga sebaliknya. Enkripsi ini menggunakan pasangan publick dan private key. Enkripsi ini lazim juga disebut dengan public-key encription/cryptography. Enkripsi jenis ini sangat praktis digunakan untuk berbagai macam keperluan karena pengirim tidak perlu mengirimkan kata-kuncinya kepada setiap orang yang menerimanya.<br />
<br />
Enkripsi asimetrik dapat dijelaskan dengan contoh kehidupan nyata seperti berikut;<br />
- Diketahui; si Anu dan si Budi ingin mengirimkan satu batang emas kepada si Anu.<br />
- Untuk membuat transaksi ini aman, maka si Anu membeli sebuah gembok (pasti disertai kunci)<br />
- Si Anu menyampaikan kepada si Budi; "Kalau kamu ingin mengirimkan emas kepada saya, tolong masukkan kedalam kotak yang kamu punya dan tutup dengan gembok saya ini", sambil memberikan gembok yang telah dibelinya.<br />
- Sehari setelah itu, si Budi pergi membeli emas dan meletakkan emas tersebut kedalam kotak dengan nama dia dan menutup kotak dengan gembok yang diberikan si Anu.<br />
- Si Budi pergi ke kantor pos dan mengirimkan kotak tersebut kepada alamat si Anu.
<br />
Dengan contoh diatas, maka emas yang dikirim akan aman sampai di tujuan walaupun pak pos bisa melihat kotaknya.<br />
<br />
<br />
<h2>
Bermain dengan RSABoy</h2>
<br />
Sekitar satu tahun yang lalu, saya pernah membuatkan sebuah aplikasi sederhana yang saya beri nama RSABoy. Source code dapat dilihat pada https://github.com/nitzaalfinas/RSABoy<br />
<br />
Mari mulai bermain-main RSABoy untuk dapat memahaminya melalui contoh kasus;<br />
<br />
1. Disuatu kota Hoax, hiduplah Bolang yang mempunyai pendengaran tajam dan Batman kuat tetapi sudah cukup tua. Mereka adalah super hero yang baru saja kenal dan ingin saling bahu membahu menumpas kejahatan. Dikota ini banyak sekali informasi invalid yang beredar di masyarakat.<br />
<br />
2. Untuk dapat berkomunikasi dengan aman dan tanpa hoax, maka mereka harus saling bertukan gembok. Eh... public key.<br />
<br />
2.a. Bolang mengeksekusi perintah:<br />
<code>
$ rsaboy.jar '{"command": "generate_key", "filename": "Bolang"}'</code><br />
<br />
2.b. Batman mengeksekusi command:<br />
<code>
$ rsaboy.jar '{"command": "generate_key", "filename": "Batman"}'
</code>
<br />
<br />
Perintah-perintah diatas menghasilkan private key dan public key. Bolang.priv.pem, Bolang.pub.pem, Batman.priv.pem, Batman.pub.pem.<br />
<br />
3. Kemudian mereka saling bertukar public key.<br />
<br />
4. Setelah satu minggu mereka berkenalan dan saling tukar gembok, eh... public key, maka tibalah saat yang ditunggu tunggu. Si Bolang mendengar sebuah keributan pencurian banteng di jalan Rabbit.<br />
<br />
5. Dengan sigap si Bolang mengeksekusi perintah untuk mengirimkan pesan kepada si Batman.<br />
Untuk mengirimkan perintah ini, Bolang perlu menggunakan gembok, eh... public key Batman. Perintah yang dijalankan adalah seperti berikut;<br />
<br />
<code>
$ rsaboy.jar '{"command": "encrypt", "message": "Criminals are in action on Rabbit Road", "pubkey_file": "Batman.pub.pem"}'
SKl21Quj/bGR1HMRNrc/qiNAFXIU8RAhBfJdQNmSwgHLKw1KFVfu78+jcQ8UAsXtG6hd8ih9y+Kpdu8aDSxGIh4MNaTBlibfuODdvjhRvBJEr+iX6rzN+2q3+2bwD/gyckePhdGyXNGEmQXTUCf9RWrsVur4gRNdzl5xiE/jQxDhrBo5IN8okTLYJ/5AQNQh2Ic7Rm91M4N70wOM/M0FWzrwFmBTFuQ3pC2+ZeMJfHR5KQ3EP1dNo4xA8GDjgSkE6fmkyWhbQspT3cLUKCHFfna9N+m8x0icbZ7MYFnzTREWrgewpNjuTFH9hmxnLQ7DWulyOlgR48V0RPQBCVr8Dg==
</code>
<br />
<br />
Setelah mendapatkan enkripsinya, maka dia perlu menempatkan dalam kotak bertanda Bolang. Atau dalam kata yang lebih rumit adalah memberikan tanda tangan atau signature.<br />
Memberikan tanda tangan harus dilakukan dengan private key si Bolang sendiri. Perintahnya adalah seperti berikut:<br />
<br />
<code>
$ rsaboy.jar '{"command": "sign", "message": "Criminals are in action on Rabbit Road", "privkey_file": "Bolang.priv.pem"}'
btT3N2EFuokJUqXfW0IN9MrGe0pi/FuvQ3sFE987/B2OKHuzZnrLl0YVfRp1i3O4Nnrhf9AfCI9ELxQQ2OENDIPQa2iA8/hKEh23IwzZyYBCQGRHc6Gzreoo5OA3IvsXABtJLXJKaNJuKvwpIl0/lTMyqbxZt7Etbfh+LsOovXzSRlDwwvOWLPk5XF8b9UFJm9IWar/EsXhO4Ee6Me49nGc7CDApwzOvv1mufn36MyrdrmQGW6W9YYme58ZBWzYu9/UmH97JLcyXS/X6uYk/iXqWUC81uBO/QA0VpaaUkVXmwvKYLSHhzrEF5ubUrYsxGT/QSkbLK2IwPBD4kDYJUg==
</code>
<br />
<br />
Setelah itu, Bolang mengirimkan signature dan kata-kata yang sudah ter-enkripsi kepada Batman.<br />
<br />
6. Batman menerima pesan dan langsung men-dekrip pesan yang diberikan menggunakan private key, eh... kunci Batman.<br />
<br />
<code>
$ rsaboy.jar '{"command": "decrypt", "message": "SKl21Quj/bGR1HMRNrc/qiNAFXIU8RAhBfJdQNmSwgHLKw1KFVfu78+jcQ8UAsXtG6hd8ih9y+Kpdu8aDSxGIh4MNaTBlibfuODdvjhRvBJEr+iX6rzN+2q3+2bwD/gyckePhdGyXNGEmQXTUCf9RWrsVur4gRNdzl5xiE/jQxDhrBo5IN8okTLYJ/5AQNQh2Ic7Rm91M4N70wOM/M0FWzrwFmBTFuQ3pC2+ZeMJfHR5KQ3EP1dNo4xA8GDjgSkE6fmkyWhbQspT3cLUKCHFfna9N+m8x0icbZ7MYFnzTREWrgewpNjuTFH9hmxnLQ7DWulyOlgR48V0RPQBCVr8Dg==", "privkey_file": "Batman.priv.pem"}' </code><br />
<code>Criminals are in action on Rabbit Road
</code>
<br />
<br />
Untuk mengetahui apakah benar ini pesan bukan hoax dan memang benar dikirimkan oleh sahabat super heronya yaitu Bolang, maka Batman harus memverifikasi dengan perintah berikut:<br />
<br />
<code>
$ rsaboy.jar '{"command": "verify", "message": "Criminals are in action on Rabbit Road", "signature":"btT3N2EFuokJUqXfW0IN9MrGe0pi/FuvQ3sFE987/B2OKHuzZnrLl0YVfRp1i3O4Nnrhf9AfCI9ELxQQ2OENDIPQa2iA8/hKEh23IwzZyYBCQGRHc6Gzreoo5OA3IvsXABtJLXJKaNJuKvwpIl0/lTMyqbxZt7Etbfh+LsOovXzSRlDwwvOWLPk5XF8b9UFJm9IWar/EsXhO4Ee6Me49nGc7CDApwzOvv1mufn36MyrdrmQGW6W9YYme58ZBWzYu9/UmH97JLcyXS/X6uYk/iXqWUC81uBO/QA0VpaaUkVXmwvKYLSHhzrEF5ubUrYsxGT/QSkbLK2IwPBD4kDYJUg==", "pubkey_file": "Bolang.pub.pem"}' </code><br />
<code>true
</code>
<br />
<br />
7. Ternyata benar, dan si Batman ganti sempak dulu sebelum mulai beraksi....<br />
<br />
<br />
<br />
------------------------------------------------------<br />
<br />
*) https://en.wikipedia.org/wiki/Internet<br />
**) https://www.ibm.com/support/knowledgecenter/en/SSGMCP_5.2.0/com.ibm.cics.ts.internet.doc/topics/dfhtl_conintro.html<br />
***) https://www.educba.com/cryptography-vs-encryption/<br />
<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-24958943132424823142019-04-06T09:51:00.000+07:002019-04-06T09:51:10.452+07:00Apa itu Blockchain?<br />
<h3>
Kenapa Anda harus mengetahuinya?</h3>
<br />
Dalam pergaulan sehari-hari, begitu banyak teman yang menanyakan tentang Bitcoin. Ya, Bitcoin...<br />
Sebenarnya Bitcoin adalah pelopor tentang lahirnya teknologi blockchain ini. Karena konsep blockhain sangat bagus, dalam perkembangannya sampai saat ini banyak lahir blockchain-blockchain baru.<br />
<br />
Teknologi blockchain menjanjikan banyak perubahan dalam banyak industri seperti; finansial, pembayaran, properti dan voting. Teknologi ini telah mampu menarik banyak investor masuk kedalamnya. Banyak diantara teman-teman kita dalam pergaulan sehari-hari yang menanyakan dan mempunyai Bitcoin adalah sebagain kecil dari orang yang tertarik dan masuk menjadi investor. Tetapi untuk diketahui, cukup banyak perusahaan/orang besar yang masuk baik sebagai investor maupun masuk langsung menerapkan teknologi blockchain seperti IBM, Fidelity, JP Morgan dan barisan-barisan banking yang ditarik oleh Ripple*.<br />
<br />
Salah satu pemanfaatan teknologi blockchain yang paling populer adalah Initial Coin Offerings (ICO). Blockchain mengubah cara startup mengumpulkan modal dan memungkinkan banyak orang untuk investasi pada satu teknologi/startup.<br />
<br />
<h3>
Jadi, apa itu blockchain dan bagaimana cara kerjanya?</h3>
<div>
<br /></div>
<div>
Secara sederhana, blockchain adalah sebuah database saja. Ya, hanya database. :) Sepertinya sederhana, tetapi revolusioner. Mari simak penjelasan berikut.</div>
<div>
<br /></div>
<div>
Database ini terdistribusi dan dapat dicopy oleh semua orang yang ingin menggunakannya. Ini sangat berbeda dengan konsep database yang konvensional yang dikontrol dan dikuasai oleh 'single entity'.</div>
<div>
<br /></div>
<h4>
Hm... Semua orang dapat memiliki databasenya. Bukankah ini tidak aman? </h4>
<div>
<br /></div>
<div>
Dalam blockchain, ada pengguna yang berhak melakukan transaksi dan ada mesin-mesin yang bertugas untuk memvalidasi transaksi. </div>
<div>
<br /></div>
<div>
Setiap pengguna dalam blockchain memiliki alamat dan masing-masing alamat tersebut adalah unik dan hanya pengguna itu saja yang dapat melakukan transaksi melalui alamat tersebut. Alamat ini sebenarnya adalah konsep enkripsi asimetrik. </div>
<div>
<br /></div>
<div>
Kata-kata yang cukup membingungkan bukan? :) ini berkaitan dengan enkripsi asimetrik, mari terus membaca agar paham.</div>
<div>
<br /></div>
<h4>
Enkripsi Asimetrik</h4>
<div>
Saat ini, ada 2 tipe enkripsi; enkripsi simetrik dan enkripsi asimetrik. </div>
<div>
<br /></div>
<div>
Simetrik enkripsi cukup sederhana, dalam bahasa lain lebih sering disebut dengan enkripsi saja. Setiap pengguna yang ingin mendekrip kata-kata yang terenkripsi, maka pengguna ini harus saling berbagi kata kunci. </div>
<div>
<br /></div>
<div>
Konsep ini tidak mungkin diterapkan dalam blockchain dimana sangat banyak pengguna. Anda tidak mungkin memberitahu password/kata-kunci Anda pada setiap orang.</div>
<div>
<br /></div>
<div>
Enkripsi asimetrik, mari saya jelaskan dengan kata-kata yang lebih sederhana melalui kasus yang terjadi pada kehidupan sehari-hari;</div>
<div>
Kita ambil contoh interaksi antara si Anu dan si Budi, dimana si Budi akan mengirimkan satu batang emas kepada si Anu. </div>
<div>
- Untuk membuat transaksi ini aman, maka si Anu membeli sebuah gembok yang pastinya dilengkapi dengan kuncinya.</div>
<div>
- Si Anu menyampaikan kepada si Budi; "Kalau kamu ingin mengirimkan emas kepada saya, tolong masukkan kedalam <b>kotak kamu</b> dan <b>tutup dengan gembok saya ini</b>", sambil memberikan gembok yang telah dibelinya </div>
<div>
- Sehari setelah itu, si Budi pergi membeli emas dan meletakkan emas tersebut kedalam kotak dengan nama dia dan menutup kotak dengan gembok yang diberikan si Anu.</div>
<div>
- Si Budi pergi ke kantor pos dan mengirimkan kotak tersebut kepada alamat si Anu. </div>
<div>
<br /></div>
<div>
Begitulah konsep asimetrik enkripsi jika dilogikakan dalam kehidupan nyata. Tukang pos tidak akan dapat membuka kotak tersebut karena dia tidak punya kuncinya. </div>
<div>
Anda dapat mencoba enkripsi asimetrik seperti yang pernah saya buat pada link berikut <a href="https://github.com/nitzaalfinas/RSABoy" target="_blank">(RSA Boy)</a>.</div>
<div>
<br /></div>
<h4>
Miner</h4>
<div>
<div>
Pada database konvensional, kita ambil contoh Bank, validatornya hanya satu yaitu bank itu sendiri. </div>
<div>
<br /></div>
<div>
Dalam blockhain, validator lazim disebut dengan istilah penambang. Validator tugasnya adalah memastikan transaksi valid dan meletakkan transaksi dalam database. Masing-masing blockchain menerapkan teknik yang berbeda-beda dalam memvalidasi tranksaksi ini. Umumnya validasi membutuhkan komputasi yang rumit. Sehingga ini memerlukan komputer yang canggih dan tenaga listrik yang cukup banyak untuk melakukan komputasi tersebut.</div>
</div>
<div>
<br /></div>
<div>
Pada public blockchain, ada sangat banyak validator. Mereka saling berkompetisi untuk melakukan validasi transaksi. Siapa yang cepat melakukan validasi, maka dialah yang berhak meletakkan data kedalam database, medapatkan reward dan memberitahukan kepada validator lainnya bahwa transaksi telah divalidasi.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
*) Sebuah blockchain yang fokus kepada pengiriman uang secara global, "One frictionless experience to send money globally"</div>
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-66962655135969865802018-02-06T10:11:00.000+07:002018-02-06T15:15:59.382+07:00RSA Boy, A Simple Public Key Cryptography ApplicationLately I'm making an app as part of my research on blockchain. I named this application as RSA Boy.<br />
<br />
From my research, most of the blockchain application uses elliptical cryptography to create public key, private key, encrypt, decrypt and verify. But, in this application I use different approach. I use RSA algorithm.<br />
<br />
RSA Boy has the ability to create private key, public key, encrypt, decrypt, sign and verify as well.<br />
<br />
You can see how asymmetric cryptography works from the example I gave to the repository.<br />
<div>
<br /></div>
It's still very far to make it a full blockchain app. But to achieve a thousand steps must start from one step. Let's have fun by writing code.<br />
<br />
You can contribute by pull request in the following repository <a href="https://github.com/nitzaalfinas/RSABoy">https://github.com/nitzaalfinas/RSABoy</a><br />
<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-86877585772463347642017-10-03T11:09:00.002+07:002017-10-03T12:12:36.456+07:00Apa itu Bitcoin, Blockchain dan Aplikasi Desentralisasi?Sekitar 2 tahun yang lalu, saya berkenalan dengan teknologi Blockchain. Teknologi ini belum begitu populer sehingga mungkin agak susah mencari referensi tentang tentang teknologi ini. Terbukti dengan adanya meetup Ethereum* pada waktu itu di Singapore, hanya saya yang datang sebagai wakil dari Indonesia**. Tetapi sebenarnya, banyak Bank Central, dan beberapa perusahaan besar sedang melakukan R&D pada teknologi ini. Teknologi ini menurut saya sangat revolusioner dalam dunia perbankan dan digital assets. Mungkin lebih jelas saya tulis pada sub bagian pemanfaatan blockchain.<br />
<br />
Seiring dengan banyaknya posting saya dengan hastag #blockchain, akhir-akhir ini pun banyak orang yang bertanya tentang pekerjaan saya. Agak susah menjawab pertanyaan tersebut karena tidak banyak orang yang mengerti tentang dunia yang sedang saya geluti. Dari pertanyaan tersebut saya selalu menjawab, saya bekerja pada sebuah perusahaan yang mengelola Bitcoin. Padahal, jawaban tersebut sebenarnya tidak tepat. Karena pada perusahaan tempat saya bekerja, mereka mengelola beberapa cryptocurrency. Nah... Apa lagi itu namanya crypto currency? Ini akan menjadi lebih membingungkan lagi. Bahkan diantara penanya, mereka tidak tau apa itu Bitcoin.<br />
<br />
OK, untuk menjelaskan ini, mungkin saya akan mulai dari Bitcoin saja.<br />
<br />
<h3>
Apa itu Bitcoin?</h3>
Bitcoin adalah sebuah cryptocurrency dan juga merupakan sebuah digital payment. Bitcoin adalah cryptocurrency pertama yang ada di dunia. Tidak seperti Fiat money yang ada pada Bank, Bitcoin berjalan tanpa kontrol oleh satu pihak manapun. Transaksi berjalan autonomous per-to-peer dan sangat mustahil untuk dipalsukan. Transaksi-transaksi dalam Bitcoin ditambahkan dan diverifikasi oleh network nodes/miner dalam distributed ledger yang dinamakan blockchain. Sehingga dapat dikatakan bahwa Bitcoin berjalan dengan teknologi Blockchain dan Bitcoin adalah pencipta teknologi Blockchain tersebut.<br />
<br />
<h3>
Lalu, apakah sebenarnya blockchain itu?</h3>
Blockchain pada dasarnya adalah database yang terdistribusi.<br />
Transaksi dalam blockchain dikirimkan dalam bentuk kriptografi dan ditandatangani secara digital.<br />
Transaksi tersebut disusun dalam sebuah block yang saling terhubung dengan hash code.<br />
Transaksi dan blocks dalam blockchain akan ditambahkan oleh sebuah node/miner dan diverifikasi oleh banyak node sehingga transaksi dan blocks mustahil untuk dipalsukan.<br />
Block yang sudah ditambahkan kedalam ledger tidak dapat diganti atau diubah dikemudian hari.<br />
<br />
<h3>
Pemanfaatan blockchain?</h3>
<br />
*) Simple-nya; salah satu saingan Bitcoin<br />
**) Lebih tepatnya, utusan perusahaan. :D<br />
<br />
<br />
[Hehe... timeout, saatnya kerja... tulisannya bersambung... Stay tune pada link ini karena sambungannya pada link ini juga]<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-78018717570387056512015-01-24T16:35:00.001+07:002015-01-24T16:35:52.103+07:00Bekerja Kolaborasi dengan GITAda 2 tipe bekerja kolaborasi dengan GIT;<br />
1. Fork & pull<br />
Fork dan pull ini biasanya lazim digunakan pada website github. Pada tipe fork dan pull ini, kolaborator bebas fork dan menjadikan repository sendiri. Untuk mengirimkan hasil kerja/perubahan, maka kolaborator mengirimkan request pull kepada project koordinator.<br />
<br />
Untuk bekerja dengan metode fork dan pull, Anda bisa lihat langsung pada website github.<br />
<br />
<br />
2. Shared repository<br />
Shared repository kebanyakan digunakan oleh pekerjaan kolaborasi pada tim kecil. Kolaborator bebas/langsung membuat push ke repository.<br />
<br />
Untuk dapat menggunakan shared repository pada project kecil, kita terlebih dahulu harus mempunyai bare repository dan selanjutnya mengetikkan command berikut;<br />
<br />
<pre>git config core.sharedRepository group</pre>
<br />
<b><br /></b>
Tujuan dari perintah diatas adalah setiap anggota yang membuat perintah push dapat dianggap sebagai group dari repository.<br />
<br />
Sebelum menjalankan perintah tersebut, file config akan terlihat seperti ini;<br />
<pre>[core]
repositoryformatversion = 0
filemode = true
bare = true
</pre>
<br />
Setelah menjalankan perintah git config diatas, file config pada bare repository akan terlihat seperti berikut;<br />
<br />
<pre>[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedRepository = group
</pre>
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-74158567458420657082014-09-13T17:09:00.001+07:002014-09-13T17:09:17.606+07:00“Bash script untuk meng-automatisasi hidup Anda”<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Pada dasarnya,
hampir semua perintah/aplikasi Linux/Ubuntu* dapat dijalankan melalui
terminal. Perintah-perintah tersebut dapat di automatisasi dengan
membuat aplikasi script yang dalam hal ini sedang dibahas adalah bash
script.<br />
<br />
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Untuk memulai bash script, pada section pertama ini saya akan bahas mengenai perintah dasar pada Linux;</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>1. Asumsi Anda
telah mengerti syntax dasar Linux sehingga saya tidak menuliskannya, seperti;</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
buat file,
</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
buat direktori,</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
menghapus file,</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
menghapus
direktori</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
mengganti owner
file</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
mengganti mode
file</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
dan perintah dasar
lainnya</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Jika Anda menguasai perintah diatas, lanjut pada perintah dibawah.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>2. Membersihkan
terminal</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ clear</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>3.
Mendefinisikan variabel dan memanggil variabel dari terminal</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ bolang=”ini
variabel bolang”</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ echo $bolang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">ini variabel
bolang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>4. Membuat
funcion langsung pada terminal</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ function
kambiang { echo “ini memanggil kambiang”; }</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ kambiang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">ini memanggil
kambiang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ function
kambiangGadang() { echo “ini kambiang gadang”; }</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ kambiangGadang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">ini kambiang
gadang</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>5. List file
berdasarkan ekstensi</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Asumsi didalam
folder ada 3 file, yaitu: file01.jpg, file02.txt, file03.zip</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Untuk melihat
file, pasti menggunakan</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ ls</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file01.jpg</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file02.txt
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file03.zip</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Melihat file
berdasarkan ekstensi;</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ ls *.jpg</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file01.jpg</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Melihat file
lengkap dengan atribut dan ditambahkan array esktensi;</div>
<div style="margin-bottom: 0cm;">
<span style="font-family: Courier New, Courier, monospace;">$ ls -l *.{jpg,txt,zip}</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file01.jpg</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file02.txt
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">file03.zip</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>6. Menjalankan
beberapa perintah dengan 'satu kali enter'</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Disini saya
menggunakan sebuah contoh kasus git yang perintahnya berulangkali
dilakukan sampai koding selesai. Saya pikir ini sangat menjengkelkan.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Perintah tersebut
dapat diserderhanakan cukup dengan operator &&</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ git add . &&
git commit . && git push origin master</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Jika perintah
diatas dijalankan, maka pertama kali akan membuka 'editor CLI'
default Anda untuk membuat keterangan commit. Setelah Anda
menyimpannya, perintah akan dilanjutkan kepada git push.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
Setelah mengenal beberapa perintah dasar seperti diatas, berikut saya akan membuat beberpa bash script sebagai contoh aplikatif;</div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>1. Cek path
interpreter bash script</b></div>
<div style="margin-bottom: 0cm;">
<span style="font-family: Courier New, Courier, monospace;">$ which bash</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">/bin/bash</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>2. Membuat bash
script pertama</b></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
Langkah pada CLI berikut adalah; membuat folder, berpindah ke folder
yang dibuat, membuat file</div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ mkdir bash_tut</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ cd bash_tut</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ nano hello_kambing.sh</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
Ketikkan dalam nano script berikut dan simpan;</div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash
</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "hello kambing"</span></div>
<div style="font-weight: normal; margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Selanjutnya ganti
menjadi executable dan jalankan</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ chmod +x
hello_kambing.sh</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$
./hello_kambing.sh</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">hello kambing</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Atau dengan
perintah lain, Anda bisa memanggil seperti berikut;</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ sh
hello_kambing.sh</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">hello kambing</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>3. Operator &&
untuk membuat beberapa command dijalankan dalam satu kali eksekusi</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Disini kembali
saya menggunakan contoh git.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Jika pada point
diatas Anda tetap mengetik beberapa kata untuk menjalankannya,
sekarang Anda dapat membuat lebih sederhana dengan membuat sebuah
aplikasi script.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Ketik kode
berikut, berikan nama, jadikan executable dan jalankan;</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">git add . &&
git commit . && git push origin master</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>4. Membaca
input dari user</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">clear
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Nama"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">read nama
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Password"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">read password
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Nama
Anda adalah $nama, password $password"</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>5. Logical dan
comparison</b></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">clear
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Nama"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">read nama
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Password"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">read password
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">if [ $nama =
"Nitza" ] && [ $password = "ganteng" ]
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">then echo
"Anda memang ganteng"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">else
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "Anda
tidak ganteng"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">fi
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>6. Checking
file/folder</b></div>
<div style="margin-bottom: 0cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">if test -f
/home/nitza/kambiang
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">then
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "kambiang
ada"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">else
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">echo "kambiang
tidak ada"
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">fi
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm;">
<br />
Beberapa command line untuk 'test'<br />
- d Mengetahui direktori<br />
-e Mengetahui file exist<br />
-f Check regular file<br />
-g SGI permission<br />
-r Check readable<br />
-s Check if file size != 0<br />
-u SUID permission<br />
-w Check writable<br />
-x Check executable</div>
<div style="margin-bottom: 0cm;">
<br /></div>
<br />
<b>7. Mempersingkat copy log file pada server</b><br />
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Terkadang Anda
tidak malas mengetik command, tetapi hanya lupa mengingat folder/file
path tempat beberapa log yang Anda butuhkan. Sementara pekerjaan ini
tiap hari harus Anda kerjakan. Yap...buatlah bash script-nya dan
tentu saja ini menggunakan perintah scp. Berikut contohnya;</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">scp
root@server.com:/usr/share/webserver_app/logs/log_file.txt
/your_local_computer/home && gedit log_file.txt</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<b>8. Menjalankan
modem</b></div>
<div style="margin-bottom: 0cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Hampir semua modem
dapat berjalan dengan cara ini. Beberapa modem CDMA dan GSM yang
tidak disupport oleh Ubuntu, ketika saya jalankan perintah ini dapat
berjalan dengan sangat baik.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Hal yang pertama
Anda lakukan adalah melihat usb Anda, memberikan modprobe yang
terkait</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
$ lsusb</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Perintah diatas
dapat memberikan Anda vendor dan product modem Anda. Ingat kodenya
untuk diisikan pada aplikasi bash script.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Ganti beberapa
konfigurasi untuk wvdial. Jika belum ada aplikasi wvdial, silahkan
install terlebih dahulu.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">$ nano
/etc/wvdial.conf</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Ganti username dan
password sesuai dengan ISP Anda</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Buat bash script
berikut.</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#!/bin/bash
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#beberpa modem
auto run sebagai cd, dan eject dengan perintah berikut</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sudo eject
/dev/sr1
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sleep 3
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#modprobe sesuai
dengan kode yang didapat dari lsusb</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sudo modprobe
usbserial vendor=0x19d2 product=0xfffe
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sleep 10
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#konfigurasi akan
dijalankan otomatis berkaitan dengan /dev/ttyUSB[n]</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sudo wvdialconf
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;"><br /></span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sleep 3
</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">#menjalankan
wvdial (menyambungkan dengan ISP)</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
</div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<span style="font-family: Courier New, Courier, monospace;">sudo wvdial</span></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
<br /></div>
<div style="margin-bottom: 0cm; margin-left: 0.05cm;">
Masih banyak fungsi bash script yang dapat Anda tulis. Silahkan buat bash script Anda sendiri untuk meng-automatisasi pekerjaan Anda.</div>
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-2374761744588097602014-09-02T17:12:00.001+07:002014-09-02T17:26:24.128+07:00Memahami Cara Kerja Web dan HTTP<b>Pendahuluan</b><br />
<br />
Aplikasi berbasis web telah berkembang pesat pada masa ini menjadikan orang awam paling tidak mengetahui bagaimana web itu bekerja.<br />
<br />
Berbasis web bukan berarti hanya website, berbasis web artinya dapat terkoneksi melalui protokol web untuk mengakses data, mengendalikan sesuatu dari jarak jauh.<br />
<br />
Telpon pintar, Internet banking, rumah pintar, GPS, komputasi awan (cloud computing) merupakan hanya beberapa aplikatif dari teknologi web. Sehingga ini mematahkan paradigma aplikasi desktop lebih hebat dari aplikasi web. Dan tulisan pendahuluan ini ingin mengedukasi sebagian besar orang yang berpandangan bahwa lulusan IT hanya dapat membuat website, benerin printer dan benerin komputer.<br />
<br />
Jika melihat konsep penerapan web lebih jauh, teknologi informasi secara umum dan web secara lebih khusus adalah <i>enabler </i>bagi sebuah organisasi baik itu pemerintahan, organisasi non profit dan organisasi profit. Dikatakan <i>enabler</i> karena web/teknologi informasi merupakan inti bisnis sehingga tanpa web/teknologi informasi tidak dapat berjalan. Bandingkan dengan pada masa lalu dimana web/sistem informasi yang hanya merupakan sebuah support bagi sebuah organisasi.<br />
<br />
Kita sebagai pribadi secara tidak sadar telah tergantung kepada teknologi web. Memposting status di media sosial, meng-upload photo pada iCloud, mencari berita tentang photo leak artis Hollywood yang sedang marak diberitakan dan lain sebagainya.<br />
<br />
Dengan teknologi web, organisasi dapat membangun <i>business intelligence</i>, <i>decission support system</i> (DSS), sistem pakar, Service Oriented Architecture (SOA) dan lain sebagainya.<br />
<br />
Tulisan diatas cukup menggambarkan bahwa mengetahui teknologi web cukup penting pada kehidupan dewasa ini. Tetapi saya tidaka akan menulis topik yang sangat luas seperti diatas. Tulisan berikut akan lebih spesifik membahas bagaimana cara kerja web dan HTTP.<br />
<br />
<br />
<b>Gambaran sedernhana dari kehidupan sehari-hari</b><br />
<br />
Seseorang sebut saja namanya Tumbuang duduk memegang sebuah telpon pintar. Si Tumbuang ingin membuat curhat pada website sobatcurhat.com. Si Tumbuang mengetikkan sebuah <i>Uniform Resource Locator</i> (URL) pada browser mobile-nya.<br />
<br />
Gambaran diatas cukup sederhana, tetapi bagaimana itu bekerja dapat dituliskan dengan sebuah tulisan yang relatif panjang seperti berikut.<br />
<br />
<br />
<b>Bagaimana proses yang terjadi?</b><br />
<br />
Dengan gambaran yang sederhana tersebut, proses yang terjadi adalah URL mencari alamat yang ada pada internet. Bisa saja alamat tersebut ada pada belahan bumi yang jauh disana, berbeda benua, berbeda negara atau dimana saja.<br />
<br />
Seperti namanya <i>Uniform Resource Locator</i>; komputer/browser <i>client</i> akan me-<i>request</i> <i>resource</i> yang dapat saja berupa tulisan, gambar atau suara dimana saja <i>resource</i> tersebut berada.<br />
<br />
Secara teknikal, <i>client browser</i> akan me-<i>request</i> data yang ada pada <i>web server </i>dan <i>web server</i> akan memberikan response terhadap request tersebut.<br />
<br />
Secara sederhana, sebenarnya setiap komputer adalah sebuah server. Komputer yang diberikan/di-set/diinstall sebagai <i>web server</i> akan dapat memberikan layanan web dan bisa berfungsi sebagai <i>web server</i>.<br />
<br />
<i>Request</i> dan <i>response</i> diberikan oleh sebuah protokol yang dinamanakan dengan <i>HyperText Transfer Protocol</i> (HTTP) dan HTTP merupakan <i>protokol stateles</i>.<br />
<br />
HTTP meminta komunikasi yang dengan bahasa yang sama antara browser dan <i>web server</i> sehingga mereka saling mengerti.<br />
<br />
Berikut proses yang terjadi secara teknikal ketika browser mengakses sebuah URL;<br />
<br />
1. Parsing URL<br />
<br />
URL mempunyai format seperti berikut: [protocol]://[domain]/[request-URI]<br />
<br />
URL yang di-request sebenarnya bukan hanya berasal dari browser. URL yang di-request dapat saja dilakukan melalui terminal atau robot. Alat untuk me-request URL ini disebut sebagai user agent sehingga kedepannya saya akan menyebut user agent untuk jenis ini.<br />
<br />
Jika pada format diatas, protocol saya tuliskan sebagai array []. Ini saya maksudkan karena masih ada protokol lain yang bisa bekerja dengan format tersebut seperti FTP, JDBC:MySQL atau yang lainnya yang tidak dibahas disini.<br />
<br />
<br />
2. HTTP Request<br />
<br />
User agent akan mengirimkan request pada web server. Metode yang paling banyak digunakan pada tahapan ini adalah GET.<br />
<br />
Method yang lain pada HTTP Request adalah HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT (HTTPS) dan PATCH.<br />
<br />
Berikut adalah sebuah contoh request yang dilakukan.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrbKQMuZGEVAN84rTEh2lm7SyiTe0te29vVg4KMKAj8FFuKy8BxTgRbwCPGOYNKaCAFbcbuRk6feVYr9ES9PlAQ8tKGiVpo1W3j9Ugjk-lR7tgIlAlj3eRoQgya65UsXdlFZSxHMIUzGgs/s1600/show01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrbKQMuZGEVAN84rTEh2lm7SyiTe0te29vVg4KMKAj8FFuKy8BxTgRbwCPGOYNKaCAFbcbuRk6feVYr9ES9PlAQ8tKGiVpo1W3j9Ugjk-lR7tgIlAlj3eRoQgya65UsXdlFZSxHMIUzGgs/s1600/show01.png" /></a></div>
<br />
Terlihat diatas; Accept, Accept-Encoding, Cookie dll merupakan properti yang dapat ditambahkan ketikan melakukan request oleh <i>user agent</i>.<br />
<br />
Jika ingin mengirimkan <i>request</i> melalui terminal, dapat menggunakan perintah curl seperti berikut;<br />
<br />
<div style="background: black; color: white; padding: 4px;">
$ curl -d "nama=Nitza" \<br />
> -d "alamat=Jakarta" \<br />
> server.com</div>
<br />
<br />
3. HTTP Response<br />
<br />
Pada tahap ini, <i>user agent</i> akan menerima response dari <i>web server</i>. <i>Response</i> tersebut biasanya akan terlihat seperti berikut;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3bkTfsjpALVQ8N5GYRofwiGqsOUGhdN3hFWgqo6ikqhfWUMOJ3cVseDyBu2bfmJ_yBaEITZDcaweBv67c5POQY9kMCKhgI4OGF5Hv_3Wd5AI_8JO-UootujxUGfGhQOh3ySg6hhagFxl/s1600/show02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh3bkTfsjpALVQ8N5GYRofwiGqsOUGhdN3hFWgqo6ikqhfWUMOJ3cVseDyBu2bfmJ_yBaEITZDcaweBv67c5POQY9kMCKhgI4OGF5Hv_3Wd5AI_8JO-UootujxUGfGhQOh3ySg6hhagFxl/s1600/show02.png" /></a></div>
<br />
<br />
Diatas, terlihat jenis response yang diterima melalui Content-Type sehingga user agent yang biasanya adalah browser mem-parsing dan render sesuai dengan Content-Type tersebut.<br />
<br />
Ragam dari Content-Type dapat dilihat pada link berikut http://en.wikipedia.org/wiki/Internet_media_type<br />
<br />
Jika menggunakan <i>user agent</i> dengan jenis <i>terminal</i>, berikut <i>syntax</i> untuk melihat <i>response</i> HTTP yang di-request;<br />
<br />
<div style="background: black; color: white; padding: 4px;">
$ curl -I http://domain.com</div>
<br />
Jika tidak menggunakan opsi -I, maka semua response akan ditampilkan pada terminal/user agent.<br />
<br />
Saya rasa pembahsan tentang curl cukup menarik karena dapat mengirimkan parameter, merequest dan melihat response tanpa bantuan user interface. Tidak adanya bantuan user interface dan berjalan pada terminal menjadikannya lebih seksi karena bisa dipanggil melalui java runtime dan bash script sehingga kita bisa membuat aplikasi baru untuk keperluan spesifik; bisa saja sebagai tester aplikasi (umumnya dipakai untuk lingkungan java) dan hacking**.<br />
<br />
<br />
<b>Apa itu stateless protokol?</b><br />
<br />
HTTP merupakan <i>stateless protokol </i>yang artinya HTTP tidak mengingat data yang kita kirim melalui browser. Setiap kali pengguna me-<i>request</i> HTTP, <i>web server</i> akan me-<i>response</i> dengan data baru setiap waktu diminta sehingga HTTP <i>request</i> dan <i>response</i> selalu dibuat per-akses. Dalam arti sederhana, tidak ada hubungan antara request & response yang lama dengan request & response yang baru.<br />
<br />
Jadi, bagaimana cara menyajikan data terkait jika HTTP tidak mengingat data yang kita minta sebelumnya?<br />
<br />
Untuk menjawab ini, saya berikan ilustrasi sebagai berikut; ketika Anda berkungjung ke website penjualan misalnya e-bay, maka setiap kali Anda melihat barang, data barang tersebut dijadikan barang favorit oleh aplikasi untuk ditampilkan kembali sebagai suggest untuk pilihan yang akan Anda beli.<br />
<br />
Proses tersebut terjadi, karena pada user agent diciptakan sebuah session dan cookie sehingga web server dapat mengingat hal tersebut dan memberikan data yang berhubungan dengan request sebelumnya. Session dan cookie adalah key-value pair data pada web server. Penjelasan lebih lanjut tentang session dan cookie mungkin akan dijabarkan pada tulisan berikutnya<br />
<br />
<br />
Jika Anda pernah melihat kode error pada sebuah halaman, maka Anda cukup beruntung mengetahuinya karena kode response jarang ditampilkan jika kode tersebut untuk iformasi, sukses dan redirection. Berikut adalah code status respon secara garis besar;<br />
1xx ditujukan sebagai informasi<br />
2xx sukses. Jika Anda sering bermain dengan Ajax, biasanya success response ini sering digunakan dengan kode sukses 200.<br />
3xx redirection<br />
4xx client error<br />
5xx server error<br />
<br />
<br />
<b>Penutup</b><br />
<br />
Dengan mengetahui cara kerja website bagi awam dapat mengetahui apa itu sebenarnya web sehingga menambah pengetahuan akan web dan bisa saja mendapat ide baru sebagai enabler bagi pribadi sendiri atau organisasinya. Sebuah contoh penerapan web adalah sebuah aplikasi Android yang saya buat untuk kepentingan keluarga yang juga saya share pada goole play sehingga ribuan orang bisa memakainya.<br />
<br />
Sendangkan dengan mengetahui cara kerja website/http ini bagi para web developer, dapat mengerti tentang trouble shooting dan membuat arsitektur yang lebih baik pada sistem yang sedang dibuat. (keamanan, ketangguhan dll).<br />
<br />
<br />
<b>Sumber</b><br />
http://www.w3.org/Protocols/rfc1341/4_Content-Type.html<br />
http://en.wikipedia.org/wiki/Internet_media_type<br />
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes<br />
<br />
<br />
*) Request dan response sebaiknya tidak dijadikan Bahasa Indonesia pada tulisan ini<br />
**) Hacking sebenarnya tidak untuk tujuan jahat. Tetapi kata ini sering disalah artikan sehinga menjadi konotasi yang negatif.nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com1tag:blogger.com,1999:blog-367895740524507916.post-12393919612849365382014-09-01T13:52:00.000+07:002014-09-01T14:03:21.707+07:00Akses database MySQL dari komputer lokal menggunakan terminalJudul dari tulisan ini memang sedikit kuno terutama pada zaman serba visual ini. Sebagian orang tidak membutuhkan ini karena menjadi coder praktis. Tetapi banyak hal yang didapat jika mengetahui perintah yang sangat dasar ini terutama untuk membuat aplikasi yang berhubungan dengan database dengan konsep yang lebih baik tanpa interpreter aplikasi lain seperti ODBC atau JDBC dan memahami konsep bagaimana koneksi tercipta sehingga mencegah serangan terhadap database.<br />
<br />
Berapa contoh keuntungan mengetahui penggunaan perintah dasar ini;<br />
- Jika tidak dapat menggunakan browser untuk database bisa menggunakan perintah ini,<br />
- Jika koneksi sangat lamban, bisa menggunakan perintah ini,<br />
- Jika tidak dapat masuk ke server sementara port MySQL (default 3306) dapat diakses,<br />
- Jika ingin membuat aplikasi yang dapat memanggil perintah melalui terminal,<br />
- Jika ingin berbuat jahat untuk meyerang server lain*,<br />
- Dan banyak jika yang lainnya sesuai dengan kasus Anda.<br />
<br />
Perlu diperhatikan disini, untuk dapat menggunakan perintah ini dari komputer lokal, port yang berhubungan dengan MySQL pada server harus diaktifkan.<br />
<br />
Untuk melihat port yang aktif pada server Anda, ketik perintah berikut;<br />
<br />
<div style="background-color: black; color: white; padding: 4px;">
<pre>$ nmap ServerAnda.com
</pre>
</div>
<br />
Jika port MySQL Anda terbuka, maka Anda dapat lanjut pada syntax selanjutnya. Jika tidak, Anda dapat mengaktifkan port tersebut seperti yang ada pada <a href="http://blog.nitzaalfinas.com/2014/08/ubuntu-firewall-uncomplicated-firewall.html" target="_blank">tulisan ini</a>.<br />
<br />
Berikut adalah syntax untuk mengakses database MySQL pada langsung dari terminal pada komputer lokal;<br />
<br />
<div style="background-color: black; color: white; padding: 4px;">
<pre>$ mysql -h ServerAnda.com -u username -p
</pre>
</div>
<br />
Setelah perintah tersebut dieksekusi, maka Anda diminta memasukkan password dan jika akses granted, Anda dapat mengelola database melalui terminal.<br />
<br />
Cukup mudah bukan? :)<br />
<br />
<br />
*) Contoh yang buruk, berhati-hatilah terhadap port database Anda.nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-44434276067925600622014-08-22T07:45:00.000+07:002014-08-22T08:30:25.690+07:00Javadoc sebagai standar dokumentasi industri softwareJava sebagai bahasa murni berorientasi objek mempunyai aturan yang ketat tentang penerapannya. Aturan-aturan yang ketat ini menjadikan Java sebagai bahasa yang populer karena keteraturannya. Java juga mengembangkan J2EE yang dikenal sebagai Java 2 Platform, Enterprise Edition. Dengan ini, Java mengklaim dan memang mengkhususkan untuk pengembangan aplikasi dengan skala besar.<br />
<br />
Aplikasi dengan skala besar tentunya membutuhkan dokumentasi yang sangat baik sebagai sumber pengelolaan aplikasi. Dengan dokumentasi yang baik, setiap programmer dapat menggunakan kembali (<i>reusable</i>) Class yang telah dibuat bahkan untuk aplikasi yang lain.<br />
<br />
<br />
<b>Jadi, apa itu Javadoc?</b><br />
<br />
Javadoc adalah dokumentasi generator dari Oracle Corporation untuk menghasilkan dokumentasi API dalam format HTML pada <i>source code</i> Java.<br />
<br />
Dari sejarah awal pengembangan Java, Java telah menerapkan javadoc ini. Begitu terstruktur dan rapi arsitektur Java sehingga banyak bahasa lain juga mulai menerapkannya.<br />
<br />
Pada IDE yang canggih seperti Netbeans dan Eclipse, Javadoc hadir dalam bentuk popup informasi sehingga programmer tidak perlu membaca halaman html. Untuk IDE yang tidak memiliki fitur javadoc atau text editor biasa, maka programmer buth javadoc (dalam format HTML).<br />
<br />
<br />
<b>Bagaimanakah bentuk Javadoc itu?</b><br />
<br />
Karena Javadoc dalam bentuk HTML, dokumentasi tersebut dapat kita jumpai banyak di internet. Salah satu bentuk Javadoc seperti screenshot berikut<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjT6LZcw0HMtQjF4lc2M1PG8IkMCUYu7TASUV0SOg68N4L8FEiCs89vhwPHOnAIbkQpWO2YZVAEVrreMHFZELnt7zybWL5LoLrhNZdZrjBFl1daSm1f15alAd4wwPLaCso-SWOFH43YyZ3/s1600/javadoc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjT6LZcw0HMtQjF4lc2M1PG8IkMCUYu7TASUV0SOg68N4L8FEiCs89vhwPHOnAIbkQpWO2YZVAEVrreMHFZELnt7zybWL5LoLrhNZdZrjBFl1daSm1f15alAd4wwPLaCso-SWOFH43YyZ3/s1600/javadoc.png" height="266" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<b><br /></b>
<b>Bagaimana cara menulis Javadoc?</b><br />
<b><br /></b>
Dokumentasi lengkap pada Javadoc dapat ditemukan pada website Oracle berikut: http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html<br />
<br />
Secara sederhana, penulisan Javadoc terlihat seperti gambar berikut;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH132hv5Mfq8vs84qG1-Rjt0gBRwhl2lpDfwOpHZMbe5q-PbQS9H-jo-qqHw6ax-3fdup_mxK2B9BG5Ypi-3UO1sdkqWBP03Tzs1ux-pokgnM39cFbfVr-nYZmlazdM7K16tTqSygiA2Ey/s1600/javadoc02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH132hv5Mfq8vs84qG1-Rjt0gBRwhl2lpDfwOpHZMbe5q-PbQS9H-jo-qqHw6ax-3fdup_mxK2B9BG5Ypi-3UO1sdkqWBP03Tzs1ux-pokgnM39cFbfVr-nYZmlazdM7K16tTqSygiA2Ey/s1600/javadoc02.png" height="149" width="400" /></a></div>
<br />
<br />
Pada IDE yang sudah memiliki fitur Javadoc akan memiliki popup untuk menampilkannya seperti berikut;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG88H-f8ctJCgF22-w6_Bzv0ZfhMXcUNww8pTRVIJRdvm8D2C267EDL9iHilIlForfvGkEbnqma8geBsuw7BPkWTr3UUmhVxPUjUgRBjHKrXr3iWDONhHFXXpyNd0Akby1LJrbILKAd-cU/s1600/javadoc03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG88H-f8ctJCgF22-w6_Bzv0ZfhMXcUNww8pTRVIJRdvm8D2C267EDL9iHilIlForfvGkEbnqma8geBsuw7BPkWTr3UUmhVxPUjUgRBjHKrXr3iWDONhHFXXpyNd0Akby1LJrbILKAd-cU/s1600/javadoc03.png" height="137" width="400" /></a></div>
<br />
<br />
<b><br /></b>
<b>Bagaimana cara menghasilkan Javadoc?</b><br />
<br />
Untuk menghasilkan Javadoc, tentunya berbeda-beda untuk setiap IDE.<br />
<br />
Saat ini saya sedang bekerja dengan Eclipse IDE sehingga saya akan menjelaskan langkah cara menghasilkan Javadoc dengan Eclipse.<br />
<br />
1. Pilih project yang akan di <i>generate</i> Javadoc-nya<br />
<br />
2. Pada bagian menu: Project - Generate Javadoc<br />
<br />
3. Ikuti saja langkah demi langkah yang disajikan oleh eclipse<br />
<br />
4. Hasil akhir akan terlihat seperti berikut;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCYAQF-Tk91z9Is5PEJpb8in6Z33XSMi47WjoWSSa-wz0xRdwvNwNHRsAXzqlV1DOy6HrN-n3SfyHN_yk-NhJk0tIVxoBIugrGjKvnt0DNlM4NsUzZJ9Tl83F18s7f6zn3in4h_0i_Sauy/s1600/javadoc05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCYAQF-Tk91z9Is5PEJpb8in6Z33XSMi47WjoWSSa-wz0xRdwvNwNHRsAXzqlV1DOy6HrN-n3SfyHN_yk-NhJk0tIVxoBIugrGjKvnt0DNlM4NsUzZJ9Tl83F18s7f6zn3in4h_0i_Sauy/s1600/javadoc05.png" height="244" width="400" /></a></div>
<br />
<br />
<br />
<br />
<b>Penutup</b><br />
<br />
Aplikasi bukanlah sebuah barang yang bisa usang. Membuat aplikasi tidak dimulai langsung sempurna. Aplikasi senantiasa diperbarui dengan berbagai macam alasan. Jika dokumentasi yang dihasilkan baik, rapi dan memiliki standar penulisan yang baku, maka pengembangan aplikasi menjadi lebih besar dan komplek akan terus terjaga.<br />
<br />
<br />
<b>Referensi</b><br />
<br />
- http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html<br />
- http://en.wikipedia.org/wiki/Javadoc<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-67042833822052007822014-08-21T21:45:00.003+07:002014-08-30T20:48:08.948+07:00Aplikasi sederhana pengiriman email pada server sendiri dengan JavaMailSeiring dengan perkembangan cloud computing dan aplikasi cloud, maka email sebagai pengenal seseorang dalam dunia maya juga menjadi sesuatu hal yang penting.<br />
<br />
Aplikasi cloud atau hanya sekedar website biasa membutuhkan email baik itu sebagai promosi produk, konfirmasi keikut sertaan, milis, atau notifikasi. Oleh karena itu, kemampuan setiap bahasa pemrograman dan developer-nya untuk mengirimkan email sangatlah penting. Alangkah lucunya sebuah aplikasi atau usaha Anda yang digadang-gadang sangat hebat mengirimkan promosinya melalui akun mail gratis seperti gmail, yahoo atau akun mail gratis lainnya.<br />
<br />
Well... jika Anda ingin membuatkan mail pribadi, bisa hubungi saya :D<br />
<br />
Pada tulisan kali ini saya membahas tentang mengirim email dengan library javax.mail. Library ini bisa didownload pada http://www.oracle.com/technetwork/java/javamail/index.html<br />
<br />
Untuk membuat email dapat terkirim melalui server, Anda harus mengaktifkan port 25 atau port lainnya yang mendukung Send Mail Transfer Protocol (SMTP)<br />
<br />
<div>
<br /></div>
<div>
1. Mengirim email dari Virtual Private Server.<br />
Pada code dibawah juga saya selipkan 'myserver.com', silahkan aktifkan baris tersebut dan menonaktifkan baris localhos untuk dapa mengirimkan email jika server Anda langsung pada IP publik.</div>
<div>
<br /></div>
<pre class="brush:csharp">package tutmailb;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) {
System.out.println("mulai mengirim");
// Dikirimkan kepada...
String to = "itsme@nitzaalfinas.com";
// Data pengirim
String from = "nitza@myserver.com";
final String username = "nitza"; //username server
final String password = "password"; //password server
// mengirimkan email melalui vps
String host = "localhost";
//mengirimkan email melalui server pribadi
//String host = "myserver.com";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Default MimeMessage object.
Message message = new MimeMessage(session);
// setFrom
message.setFrom(new InternetAddress(from));
// header
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// pesan
message.setText("Halo... Ini pengirimain email melalui JavaMail ... ");
//jika ingin mengirimkan email html, aktifkan baris berikut dan matikan baris diatas
//message.setContent("<h1>Ini adalah email html</h1>", "text/html");
// kirim email
Transport.send(message);
System.out.println("Saya keren dan telah sukses mengirimkan email... :D");
}
catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
</pre>
<div>
<br />
<br />
Compile kedalam bentuk jar. Misalnya; tutmailb.jar<br />
Untuk menjalankan email diatas, buka terminal Anda dan ketik perintah Java seperti berikut;<br />
<br />
<div style="background-color: black; color: white; padding: 5px;">
<pre>$ java -jar tutmailb.jar
</pre>
</div>
<br />
<br />
<br />
2. Mengirimkan email melalui Gmail<br />
Mengirimkan email langsung dari akun gmail Anda juga memungkinkan dilakukan melalui server Anda. Tentunya user yang akan menerima akan melihat email yang dikirim melaui gmail. Tetapi gmail juga memberikan opsi anda untuk mengganti gmail anda dengan format namaanda@perusahaananda.com.<br />
<br />
<br />
<br />
<pre class="brush:csharp">package tutmailb;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail {
public static void main(String[] args) {
System.out.println("mulai mengirim");
// Dikirimkan kepada...
String to = "kepada@gmail.com";
// Data pengirim
String from = "dari@gmail.com";
final String username = "dari";//username gmail
final String password = "password";//password gmail
// mengirimkan email melalui vps
String host = "myserver.com";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Default MimeMessage object.
Message message = new MimeMessage(session);
// setFrom
message.setFrom(new InternetAddress(from));
// header
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// pesan
message.setText("Halo... Ini pengirimain email melalui JavaMail ... ");
// kirim email
Transport.send(message);
System.out.println("Saya keren dan telah sukses mengirimkan email... :D");
}
catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
</pre>
<br />
Untuk menjalankannya, sama dengan cara diatas menggunakan terminal.
<br />
<br />
<br />
3. Selesai.<br />
<br />
Berikut screenshot aplikasi diatas dari server aplikasi diatas.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvIyElcJFFxvQgEdgscqphcqjZXvJTLdKs1GINzEpYqzh7IOcrdvEPLmrzdA37t0TD-K2GzSMZ72KfxN38e6eeHWbBb4wxhhhn3JtjmEdVOlOONL9ioV4ZUTFRuzCDFWC1ovAAi6208zz/s1600/sobatkirim.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvIyElcJFFxvQgEdgscqphcqjZXvJTLdKs1GINzEpYqzh7IOcrdvEPLmrzdA37t0TD-K2GzSMZ72KfxN38e6eeHWbBb4wxhhhn3JtjmEdVOlOONL9ioV4ZUTFRuzCDFWC1ovAAi6208zz/s1600/sobatkirim.png" /></a></div>
<br />
<br />
<br />
Aplikasi sederhana diatas masih berjalan dengan command line. Mungkin pada tulisan selanjugnya saya akan bahas mengirimkan email dengan <i>User Interface </i>(UI).<br />
<br />
<br /></div>nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-7224425592989881152014-08-21T13:16:00.002+07:002014-08-21T13:16:43.010+07:00Ubuntu Firewall - Uncomplicated Firewall<i>Firewall</i> atau dalam bahasa Indonesia diartikan sebagai tembok api. Dalam pengertiannya pada Teknologi Informasi tidak jauh berbeda.<br />
<br />
<i>Firewall</i> adalah sistem perangkat lunak yang membentengi dan meng-kontrol lalu lintas jaringan, menjaga keamanan jaringan tersebut terhadap lalulintas yang tidak aman. Firewall biasanya diterapkan pada sebuah gateway mesin antara jaringan lokal dan internet.<br />
<br />
Tulisan kali ini tidak membahas lebih dalam tentang <i>firewall</i>. Tulisan kali ini hanya membahas tentang firewall yang secara default untuk Ubuntu yaitu Uncomplicated Firewall (UFW).<br />
<br />
<i>Firewall</i> biasanya sangat berhubungan erat dengan port-port pada mesin. Untuk mengetahui port mana yang terbuka pada sebuah mesin/sistem, kita bisa melihat dengan perintah <b>nmap</b> seperti berikut;<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1DZLtrNokoAJT0S9Y2q5crtrrVWuOFMsxqBsIB0I5P3QADFLfN3_37bC4RRJo68HBd4gy_kuu_KUjFOVWoTH69en5f0KaxloOwN16bEljXmZFTL2VGOl0npRfbaSFPO4LEo5heFRO1IKp/s1600/ufw00a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1DZLtrNokoAJT0S9Y2q5crtrrVWuOFMsxqBsIB0I5P3QADFLfN3_37bC4RRJo68HBd4gy_kuu_KUjFOVWoTH69en5f0KaxloOwN16bEljXmZFTL2VGOl0npRfbaSFPO4LEo5heFRO1IKp/s1600/ufw00a.png" /></a></div>
<br />
<br />
Dari contoh diatas, kita dapat melihat detik.com membuka port 22 untuk ssh, port 80 untuk http dan port 443 untuk https. Dan dapat kita lihat lebih jauh, ada tcp dibelakang port untuk kasus lain, kita juga bisa temukan udp. Untuk tcp/udp tidak akan diulas pada tulisan ini. Jika Anda ingin tau lebih jauh, berikut ada penjelasan ringant tentang <a href="http://www.bleepingcomputer.com/tutorials/tcp-and-udp-ports-explained/" target="_blank">tcp/udp</a>. Lebih jauh lagi, untuk para hacker, mengetahui port yang terbuka dapat menjadikan pintu masuk bagi mereka. Maka dari itu, diperlukanlah sebuah <i>firewall</i> yang secara default sudah ada pada Ubuntu yaitu UFW.<br />
<br />
Berikut command dasar untuk UFW;<br />
<br />
1. Melihat status UFW<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw status</span><br />
atau<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw status verbose</span><br />
<br />
Untuk melihat raw status<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw show raw</span><br />
<br />
<br />
2. Mengaktifkan UFW<br />
Paket UFW telah ada pada Ubuntu tetapi secara default tidak berjalan pada sistem. Untuk mengaktifkannya, ketik perintah berikut;<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw enable</span><br />
<br />
3. Mematikan UFW<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw disable</span><br />
<br />
<br />
<br />
4. Allow<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow <port>/<optional: protocol></span><br />
<br />
Contoh<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow 22/tcp</span><br />
<br />
<br />
5. Deny<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw deny <port>/<optional: protocol></span><br />
<br />
<br />
Contoh:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw deny 22/tcp</span><br />
<br />
<br />
6. Menghapus rule<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw delete deny <port>/<optional: protocol></span><br />
<br />
<br />
Contoh:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw delete deny 22/tcp</span><br />
<span style="font-family: Courier New, Courier, monospace;"># ufw delete deny 22</span><br />
<span style="font-family: Courier New, Courier, monospace;"># ufw delete allow 22</span><br />
<br />
<br />
7. Men-allow berdasarkan service<br />
Contoh:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow http</span><br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow https</span><br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow smtp</span><br />
<span style="font-family: Courier New, Courier, monospace;"># ufw allow submision</span><br />
<port><optional: protocol=""><span style="font-family: Courier New, Courier, monospace;"># ufw allow imaps</span></optional:></port><br />
<port><optional: protocol=""><br /></optional:></port>
<port><optional: protocol=""><br /></optional:></port>
<port><optional: protocol="">Sumber lainnya yang bisa dibaca tentang UFW;</optional:></port><br />
<port><optional: protocol="">- https://help.ubuntu.com/10.04/serverguide/firewall.html</optional:></port><br />
<port><optional: protocol="">- https://wiki.ubuntu.com/UncomplicatedFirewall</optional:></port><br />
<port><optional: protocol="">- https://help.ubuntu.com/community/UFW</optional:></port><br />
<port><optional: protocol="">- https://github.com/miniwark/miniwark-howtos/wiki/Firewall-setup-on-Ubuntu-12.04</optional:></port><br />
<port><optional: protocol=""><br /><br />
</optional:></port>nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com1tag:blogger.com,1999:blog-367895740524507916.post-63727754811546513432014-08-19T14:39:00.001+07:002014-08-19T18:27:05.342+07:00ApplicationContext pada Spring Web MVC<div>
Aplikasi Java berbasis web memerlukan environment yang berbeda-beda sehingga dibutuhkanlah sebuah 'script' yang dapat diatur tanpa melalui compiling. Script ini biasanya dalam format xml yang ditempatkan pada folder resources. Karena tidak di-compile menjadi bytecode, maka kita dengan mudah dapat mengganti script tersebut ketika sudah berada pada server produksi.</div>
<div>
<br /></div>
<div>
Misalnya; untuk bekerja pada lingkungan development lokal kita memerlukan setting database dengan user root dan password 1234. Sedangkan pada server produksi, kita memerlukan setting user kambing dengan password ganteng. Maka dari itu karena kita menerapkan ApplicationContext maka dengan mudah kita dapat mengganti sesuai dengan lingkungan kerja kita.</div>
<div>
<br /></div>
<div>
Berikut adalah langkah-langkah bagaimana membuat ApplicationContext pada Spring Web MVC;</div>
<div>
<br /></div>
1. Buat sebuah project Spring Web MVC.<br />
<div>
Pada pembuatan project ini saya sarankan menggunakan Spring Tool Suite (STS).</div>
<div>
<br /></div>
<div>
2. Buat class dengan nama TutAppContext.java</div>
<div>
<pre class="brush:csharp">package com.nitza.trycontexta;
public class TutAppContext {
private String name;
private String pekerjaan;
public void setName(String name) {
this.name = name;
}
public void setPekerjaan(String pekerjaan) {
this.pekerjaan = pekerjaan;
}
public String printJsonString() {
return "{ \"Nama\": \""+name +"\", \"Pekerjaan\":\""+pekerjaan+"\" }";
}
}
</pre>
<br /></div>
<br />
3. Buat file MyBeans.xml<br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><beans xmlns="http://www.springframework.org/schema/beans"</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>xsi:schemaLocation="http://www.springframework.org/schema/beans</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"></span><br />
<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span><bean id="tutBean" class="com.nitza.trycontexta.TutAppContext"></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span><property name="name" value="Nitza" /></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span><property name="pekerjaan" value="Consultant" /></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span></bean></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"></beans></span><br />
<br />
<br />
4. Ganti HomeController yang dibuat secara default seperti berikut<br />
<br />
<pre class="brush:csharp">package com.nitza.trycontexta;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HomeController {
@RequestMapping("/")
@ResponseBody
public String tutContext() {
ApplicationContext context = new ClassPathXmlApplicationContext("MyBeans.xml");
TutAppContext tutBean = (TutAppContext) context.getBean("tutBean");
return tutBean.printJsonString();
}
}
</pre>
<br />
<br />
5. Struktur file/folder terlihat seperti berikut<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3TC_1R4U4-hIzTZMHVPkLnkTUzfFwcDRdK3gkUCsZJ8fv1Q9VSoXCe1QkjyD-7REhDpsLYGwYyQE-BKT3fK9t8rJq5HnpOtIu4WXw9wXK12eG93beeioX3kAutqvI6KgD_XygzOeNv1xu/s1600/struktur_folder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3TC_1R4U4-hIzTZMHVPkLnkTUzfFwcDRdK3gkUCsZJ8fv1Q9VSoXCe1QkjyD-7REhDpsLYGwYyQE-BKT3fK9t8rJq5HnpOtIu4WXw9wXK12eG93beeioX3kAutqvI6KgD_XygzOeNv1xu/s1600/struktur_folder.png" /></a></div>
<br />
<br />
<br />
6. Ketika aplikasi dijalankan akan terlihat seperti berikut<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_0ded122ItqljPJlytO8RMGMhNRrOUKEiFZ42EjPrYHXE1SeAAaDLnLowWZRYEkNiDdgsQEEQp_N_au7J9VGYkmc8qLlyFZ53GMAhhQBTScGT6mgMvlDVsxwZ6VyQ2fSa4hSqf43l0u6c/s1600/app_jalan.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_0ded122ItqljPJlytO8RMGMhNRrOUKEiFZ42EjPrYHXE1SeAAaDLnLowWZRYEkNiDdgsQEEQp_N_au7J9VGYkmc8qLlyFZ53GMAhhQBTScGT6mgMvlDVsxwZ6VyQ2fSa4hSqf43l0u6c/s1600/app_jalan.png" /></a></div>
<br />
Finish!<br />
<br />
Jika ingin download contoh, berikut link <a href="https://github.com/nitzaalfinas/SpringWebMvcAppContext" target="_blank">github</a>-nya.<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-29570665077884420872014-08-17T15:47:00.001+07:002014-08-17T21:11:09.800+07:00Bekerja dengan file dan folder pada JavaHampir semua aplikasi bekerja dengan file/folder dan Java sebagai bahasa <i>Bytecode</i> mempunyai keunggulan dibandingkan dengan bahasa script. Aplikasi Java yang berbasis web dapat dikombinasikan dengan 'Java yang berjalan pada desktop'. Ini menjadikan Java dapat bekerja dengan file jauh lebih dalam.<br />
<br />
Sebagai contoh sederhana, website keepvid.com dapat mengkonversi video-video yang ada pada url kedalam bentuk yang bisa kita download. Tentu saja ini tidak dapat dilakukan oleh bahasa script. Oleh karena itu, keepvid.com membutuhkan Java diaktifkan untuk bisa bekerja dengan baik. Ya, begitulah salahsatu keunggulan Java diantara keunggulannya yang lain.<br />
<br />
Pada tulisan kali ini, saya akan membahas tentang modifikasi file/folder pada Java menggunakan Spring MVC, class yang kita butuhkan adalah java.io.File dan perlu dicatat bahwa tutorial ini menggunakan Linux file/folder system.<br />
<br />
Berikut adalah cara bekerja dengan file/folder;<br />
<br />
<br />
1. Membuat folder<br />
<br />
<pre class="brush:csharp">@RequestMapping("/buat_direktori")
@ResponseBody
public String getBuatDirektory() {
//definisikan path
File path = new File("/home/nitza/direktori");
//jika path belum ada, buat path baru
if(!path.exists()) {
path.mkdirs();
}
return "ok";
}
</pre>
<br />
<br />
2. Me-rename file<br />
<br />
<pre class="brush:csharp">@RequestMapping("/rename_file")
@ResponseBody
public String getTestRenameFile() {
//file yang ada di server
File fileYgAda = new File("/home/nitza/resources/folder_temp/sesuatu.png");
//buat file kosong terlebih dahulu
File fileBaru = new File("/home/nitza/resources/folder_temp/berubah.png");
if(fileYgAda.renameTo(fileBaru)){
return "berhasil";
}
else {
return "gagal";
}
}
</pre>
<br />
<br />
3. Memindahkan file pada folder yang lain<br />
<br />
<pre class="brush:csharp">@RequestMapping("/pindah_file")
@ResponseBody
public String getPindahFile() {
//file yang ada di server
File fileYgAda = new File("/home/nitza/resources/folder_temp/bolang.png");
//buat file baru
File fileBaru = new File("/home/nitza/resources/bolang.png");
if(fileYgAda.renameTo(fileBaru)){
return "berhasil";
}
else {
return "gagal";
}
}
</pre>
<br />
<br />
4. Copy file dengan linux command<br />
Metode ini sedikit tricky tetapi sangat berguna. Dan metode ini memberika kita akses untuk menjalankan berbagai macam command pada Linux. Tetapi yang dibahas dibawah hanyalah perintah untuk copy file dengan syntax cp<br />
<br />
<pre class="brush:csharp">@RequestMapping("/copy_file")
@ResponseBody
public String getCopyFile() throws IOException {
Runtime.getRuntime().exec("cp /home/nitza/resources/folder_temp/kucing.png /home/nitza/resources/folder_temp/kucingx.png");
return "ter-copy";
}
</pre>
<br />
<br />
<br />
5. Copy file dengan Apache Commons library<br />
<br />
<pre class="brush:csharp">@RequestMapping("/copy_file_b")
@ResponseBody
public String getCopyFileB() throws IOException {
//file yang ada di server
File fileYgAda = new File("/home/nitza/resources/folder_temp/kambing.png");
//buat file kosong terlebih dahulu
File fileBaru = new File("/home/nitza/resources/folder_temp/kambingb.png");
FileUtils.copyFile(fileYgAda, fileBaru);
return "ter-copy";
}
</pre>
<br />
<br />
Masih banyak method-method pada java.io.File yang harus di-explore seperti isDirectory(), isFile(), exists() dan lain sebagainya. Dan untuk bahan bacaan lebih lengkap tentang java.io.File dapat ditemukan pada berikut; http://docs.oracle.com/javase/7/docs/api/java/io/File.html<br />
<br />
<br />nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com1tag:blogger.com,1999:blog-367895740524507916.post-69702421602145250192014-08-17T09:20:00.001+07:002014-08-17T16:03:36.613+07:00Tutorial aplikasi upload file dengan Spring MVCUntuk mengikuti tutorial ini, saya sarankan menggunakan Spring Tool Suite (STS).<br />
<br />
Berikut langkah-langkah membuat aplikasi upload dengan Spring MVC;<br />
<br />
1. Buat project<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO2px8lN6IsOhYpw2zcBXwdQldOyU03mkq2WbRqvKO5Lzn2Z9XW48w38yE-BK5Kw-ZxamDRRWj-tLONvqpwZBOdvGj2Vz6n3Pxz52qUnpNBjVgjodPD2JjeLOf9_AINfDhtFooBttslkAS/s1600/tut01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjO2px8lN6IsOhYpw2zcBXwdQldOyU03mkq2WbRqvKO5Lzn2Z9XW48w38yE-BK5Kw-ZxamDRRWj-tLONvqpwZBOdvGj2Vz6n3Pxz52qUnpNBjVgjodPD2JjeLOf9_AINfDhtFooBttslkAS/s1600/tut01.png" height="400" width="290" /></a></div>
<br />
<br />
2. Buat project setting<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5mT30V1dT-NOjPZQ6J00OjtursYZwzrEiakwmWTIP2ZotLgeYqu39ecmHO1-4oSwqvS4P_bLKqwAS2gI7Nh2jYk0NkjhPvBr52ez-lzkopItVKJ5heKHj0Qvlx-XnIRHmRmyuIzPToV3C/s1600/tut02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5mT30V1dT-NOjPZQ6J00OjtursYZwzrEiakwmWTIP2ZotLgeYqu39ecmHO1-4oSwqvS4P_bLKqwAS2gI7Nh2jYk0NkjhPvBr52ez-lzkopItVKJ5heKHj0Qvlx-XnIRHmRmyuIzPToV3C/s1600/tut02.png" height="267" width="400" /></a></div>
<br />
<br />
3. Struktur file/folder terlihat seperti berikut<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-oC5u7EieeqEe6pflnxSH-YF-QRku85KxX6yfnYTQC1zl0mnspQ_-969J-b6QlhnrC00J6AToi40SOgb2cRa29Ik5AYQPX393EOmUWv9JeGv3-IemrTiE83MFYdRt7R4O4VIS5i-Q01aC/s1600/tut03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-oC5u7EieeqEe6pflnxSH-YF-QRku85KxX6yfnYTQC1zl0mnspQ_-969J-b6QlhnrC00J6AToi40SOgb2cRa29Ik5AYQPX393EOmUWv9JeGv3-IemrTiE83MFYdRt7R4O4VIS5i-Q01aC/s1600/tut03.png" height="400" width="275" /></a></div>
<br />
<br />
4. Atur dependencies (penambahan dependency)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh1UEYwyQkcF50pBTq9ITC6eOp6dMD7qo8rDp04wIIuQAIHYau2F0-GP7Zc30OZTA4qOkbxO-kYeoEM66X1NhlVLC73CHiBvECWSgyU2tDMZZ043D4Q8MbPHrY8mogOGDnIy7LSpRZSjYN/s1600/tut04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh1UEYwyQkcF50pBTq9ITC6eOp6dMD7qo8rDp04wIIuQAIHYau2F0-GP7Zc30OZTA4qOkbxO-kYeoEM66X1NhlVLC73CHiBvECWSgyU2tDMZZ043D4Q8MbPHrY8mogOGDnIy7LSpRZSjYN/s1600/tut04.png" height="202" width="400" /></a></div>
<br />
5. Karena kita memulai dengan Spring Tool Suite (STS) mengikuti langkah-langkah diatas, maka secara default maka Controller-nya dibuat oleh STS. Ganti Controller seperti code berikut<br />
<br />
<pre class="brush: csharp">package com.nitza.tutupload;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home() {
return "home";
}
}
</pre>
<br />
<br />
6. Buat form dan ganti home.jsp seperti berikut<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd4jqJbOq-KlCIfUHuTIT5L60DM9bpOBKyctKtPyxZMEXkpFi83tTw1y3RUpNa1cLMHfb74icnm-9A2XEbnTx6mktNzpB6q4a9ABOaKgiSyGp8wEc7phJ2hO0qKmNQMiuAf9cRJul2o4I4/s1600/tut05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd4jqJbOq-KlCIfUHuTIT5L60DM9bpOBKyctKtPyxZMEXkpFi83tTw1y3RUpNa1cLMHfb74icnm-9A2XEbnTx6mktNzpB6q4a9ABOaKgiSyGp8wEc7phJ2hO0qKmNQMiuAf9cRJul2o4I4/s1600/tut05.png" /></a></div>
<br />
<br />
7. Tambahkan method postFileUpload seperti berikut<br />
<br />
<pre class="brush:csharp">package com.nitza.tutupload;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HomeController {
@Autowired
ServletContext context;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home() {
return "home";
}
@RequestMapping(value="/fileupload/upload",method=RequestMethod.POST)
public String postFileUpload(HttpServletRequest request,
HttpServletResponse response,
Model model)
{
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
List fileNames = new ArrayList(); //upload beberapa file
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory(); //membuat FileFactory
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (!item.isFormField() && !item.getName().equals("")) {
String fileName = item.getName();
/* jika file upload ditempatkan relatif terhadap folder aplikasi (/resources)
String root = context.getRealPath("/");
File path = new File(root + "/resources");
*/
//berikut ditempatkan relatif terhadap server
File path = new File("/home/nitza/tututut");
if (!path.exists()) {
boolean status = path.mkdirs(); //jika path tidak ada, maka dibuat oleh aplikasi
}
File uploadedFile = new File(path + "/" + fileName);
fileNames.add(fileName);
System.out.println("File Path:-"
+ uploadedFile.getAbsolutePath());
item.write(uploadedFile);
}
}
} catch (FileUploadException e) {
System.out.println("FileUploadException:- " + e.getMessage());
} catch (Exception e) {
System.out.println("Exception:- " + e.getMessage());
}
}
model.addAttribute("files",fileNames);
return "view_success";
}
}
</pre>
<br />
<br />
8. Buat file view_success.jsp seperti berikut<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tdHYyytw5waub_wfj3m-x9dFNrgYdYhAtWyGaz4LKvUSwRbhVmEsZh2vgDnfoW8Fq2zREC077rBElK4PinWoneCGwUHu9TX41Oni0bkSD9QAVKF_zf4OiJAv6eQZvEMpd3XLRIFpaJRZ/s1600/tutx.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tdHYyytw5waub_wfj3m-x9dFNrgYdYhAtWyGaz4LKvUSwRbhVmEsZh2vgDnfoW8Fq2zREC077rBElK4PinWoneCGwUHu9TX41Oni0bkSD9QAVKF_zf4OiJAv6eQZvEMpd3XLRIFpaJRZ/s1600/tutx.png" /></a></div>
<br />
<br />
Finish!
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0tag:blogger.com,1999:blog-367895740524507916.post-40103817030195250982014-08-15T16:08:00.003+07:002019-08-21T06:47:13.569+07:00Manipulasi DOM dengan JavaScriptBegitu banyak sumber tentang sejarah JavaScript. Ada yang mengatakan tidak berhubungan dengan Java dan ada yang mengatakan berhubungan dengan Java. Untuk menggali lebih jauh, mungkin kita harus melakukan research lebih lanjut dan tulisan ini tidak difokuskan untuk itu. :D Saya ambil saja salah satu sumber yang saya yakini yang saya dapatkan pada halaman <a href="http://oreilly.com/pub/a/javascript/2001/04/06/js_history.html" target="_blank">http://oreilly.com/pub/a/javascript/2001/04/06/js_history.html</a> yang menyatakan bahwa Javascript dan Java saling berhubungan pada awal pengembangannya.<br />
<br />
Berikut kutipan yang diterjemahkan pada halaman tesebut;<br />
"Balik pada awal 1995. Netscape mempekerjakan Brendan Eich pada MicroUnitSystems Engineering untuk mengimplementasikan satu bahasa baru. Membuat Navigator baru yang menambahkan dukungan Java yang dapat diakses oleh programmer non-Java. Eich memutuskan untuk membuat script terpisah yang menyesuaikan dengan <i>environtment</i> dan <i>audience </i>(programmer) agar web designer dan "<br />
web developer dapat terhubung pada elemen-elemen yang ada pada halaman (html)."<br />
<br />
Bahasa script seperti; JavaScript, PHP, Ruby, AutoLISP dll sejatinya diperuntukkan untuk aplikasi yang kecil. Tetapi seiring perkembangan waktu, bahasa script berkembang kearah enterprise tentunya dengan arsitektur yang disesuaikan.<br />
<div>
<br /></div>
<div>
Dulu, JavaScript digunakan hanya terbatas pada akses halaman html. Pada masa ini, JavaScript telah dikembangkan secara luas seperti game engine, animasi, manipulasi halaman html, framework UI, dll.</div>
<div>
<br /></div>
<div>
Pada tulisan kali ini, saya akan menunjukkan bagaimana memanipulasi <a href="http://www.w3.org/TR/DOM-Level-2-Core/introduction.html" target="_blank">Document Object Model</a> (DOM) menggunakan JavaScript dengan format latihan;</div>
<div>
<br /></div>
<div>
<br />
1. Menambahkan tulisan pada node[1]<br />
<br /></div>
<div>
Buatlah page seperti berikut<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZQClh1dyvbtOuRief3v9_Td-OfkP4HtPvN4w7Dg-Yu7czDTmTXhbMxcoRIOAQb_mFYtuiKidCp0GFWWeTHxUZ_Tlsv44G9pxyOnXmEfu9oWh6jHUzsNpeHunoPJjg7B1O3BY50iHxONyX/s1600/dom01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZQClh1dyvbtOuRief3v9_Td-OfkP4HtPvN4w7Dg-Yu7czDTmTXhbMxcoRIOAQb_mFYtuiKidCp0GFWWeTHxUZ_Tlsv44G9pxyOnXmEfu9oWh6jHUzsNpeHunoPJjg7B1O3BY50iHxONyX/s1600/dom01.png" /></a></div>
<br />
<br />
Jalankan page maka akan terlihat seperti berikut;<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOQ3msTN_YEVr2SFqAqjUYW43jbuFjxX_TDS2cSVyLHILhgsuBH4mtq0PWOFvTzpXP3R8G9TM5pFJmynw3j_eihtBsbUtGlT4Yq-1wBron2MK3wF1gsSKZkeaRC2t-pI2OH2CNJS8LymqQ/s1600/dom02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOQ3msTN_YEVr2SFqAqjUYW43jbuFjxX_TDS2cSVyLHILhgsuBH4mtq0PWOFvTzpXP3R8G9TM5pFJmynw3j_eihtBsbUtGlT4Yq-1wBron2MK3wF1gsSKZkeaRC2t-pI2OH2CNJS8LymqQ/s1600/dom02.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
2. Menambahkan attribut style pada elemen.<br />
Melanjutkan contoh diatas, sekarang bukalah <i>developer tools</i> dan ikuti gambar berikut;<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSQxV4TZuJ5q-oQMzpa0loKjz11udHryLFYmmRZO3mKZeW22JgXw93YsSc7tbPf1XYOVFoHnNIsUJZpkYcpKihBJFshmxotN3kt0_5Tlv5LafWDbKY6JpDvIpLj4QJa1-n0PmmARCq-vPt/s1600/dom03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSQxV4TZuJ5q-oQMzpa0loKjz11udHryLFYmmRZO3mKZeW22JgXw93YsSc7tbPf1XYOVFoHnNIsUJZpkYcpKihBJFshmxotN3kt0_5Tlv5LafWDbKY6JpDvIpLj4QJa1-n0PmmARCq-vPt/s1600/dom03.png" /></a></div>
<br />
<br />
<div id="elemen1">
</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
3. Menambahkan text pada elemen DOM<br />
Berikut ini Anda kita akan mempelajari bagaimana menangani array pada elemen dan memberinya nama.<br />
<br />
Buatlan halaman seperti berikut<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNXyy27nxxc97CN-g_SRwJemBml3_PNzqguVk84Adg9POK_afgXkSQpbGxxae03pG3Txo0kJFEUYQ18DaRMCTpGTXOYph2ORMwi_XDhsHlQMq3YbI5Exy4QknpyHJi0S1o9oarvNc4uQt5/s1600/kw01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNXyy27nxxc97CN-g_SRwJemBml3_PNzqguVk84Adg9POK_afgXkSQpbGxxae03pG3Txo0kJFEUYQ18DaRMCTpGTXOYph2ORMwi_XDhsHlQMq3YbI5Exy4QknpyHJi0S1o9oarvNc4uQt5/s1600/kw01.png" /></a></div>
<br />
<br />
Buka halaman tersebut, buka <i>developer tools</i> dan tuliskan langkah-langkah berikut;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYuSQjy71F10ao5DxvdAyZhpPPxN5t1WyTh5zJgBevtMyDdvCqPZr3HlmFIl6MEvEnksN2PelvHytRteYLnXDzIk1eHL_lZGhkLGIA0dx2umT_-wzLma090gjCyrRtIhmolmjv66nJKjv/s1600/kw02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYuSQjy71F10ao5DxvdAyZhpPPxN5t1WyTh5zJgBevtMyDdvCqPZr3HlmFIl6MEvEnksN2PelvHytRteYLnXDzIk1eHL_lZGhkLGIA0dx2umT_-wzLma090gjCyrRtIhmolmjv66nJKjv/s1600/kw02.png" /></a></div>
<br />
<br />
<br />
<br />
4. Menambahkan class pada elemen DOM<br />
Game kali ini cukup menarik karena kita bisa membuat dan memodifikasi elemen, menempatkan class atau id sehingga berwarna-warni.<br />
<br />
Game berikut bisa dimulai dengan merefresh halaman yang sudah dibuat pada game diatas sebelumnya.<br />
Buka developer tools, dan ikuti berikut;<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQvjpFtSyl0SKH6fAaxNdHAeuyYspUAcl33KlchEHYzun2wwrzJH5WeS240F6cbJPG-XfqMTdg5JHlp5V_NySJviVL1rjGefJ9mqzXtmHp1PByizfustrJazHFYIJfRh3fh5NAknVeg-kq/s1600/kw03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQvjpFtSyl0SKH6fAaxNdHAeuyYspUAcl33KlchEHYzun2wwrzJH5WeS240F6cbJPG-XfqMTdg5JHlp5V_NySJviVL1rjGefJ9mqzXtmHp1PByizfustrJazHFYIJfRh3fh5NAknVeg-kq/s1600/kw03.png" /></a></div>
<br />
<br />
Game yang menarik bukan? :)<br />
<br />
<br />
<br />
<br />
[1] node = DOM element, nodes = DOM elements</div>
nitza alfinashttp://www.blogger.com/profile/02060113817645541545noreply@blogger.com0