<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4231702298745313025</atom:id><lastBuildDate>Sun, 30 Nov 2025 08:49:44 +0000</lastBuildDate><category>linux</category><category>tips tricks</category><category>simple and useful</category><category>debian</category><category>news</category><category>server</category><category>tech</category><category>android</category><category>installasi</category><category>database</category><category>programming</category><category>website</category><category>security</category><category>mysql</category><category>Web Browser</category><category>arch linux</category><category>mongodb</category><category>postgresql</category><category>fun stuff</category><category>monitoring</category><category>apache</category><category>bash</category><category>java</category><category>nginx</category><category>nodejs</category><category>android studio</category><category>aplikasi</category><category>eclipse</category><category>ide</category><category>wordpress</category><category>Firewall</category><category>cms</category><category>crunchbang</category><category>inux</category><category>iptables</category><category>joomla</category><category>php</category><category>ubuntu</category><category>wheezy</category><category>animasi</category><category>chatting</category><category>disain</category><category>editing</category><category>enve</category><category>express</category><category>partisi</category><category>proxy</category><category>signal</category><category>socket.io</category><category>steam</category><category>systemd</category><category>video</category><category>virtualbox</category><category>whatsapp</category><title>billnode - Life In Open Source Culture</title><description>Berbagi informasi Teknologi terbaru, Android, Linux, Open Source, Tutorials, Tips &amp; Tricks.</description><link>http://billnode.blogspot.com/</link><managingEditor>noreply@blogger.com (Bill)</managingEditor><generator>Blogger</generator><openSearch:totalResults>138</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Berbagi informasi Teknologi terbaru, Android, Linux, Open Source, Tutorials, Tips dan Tricks</itunes:subtitle><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-979520130550562831</guid><pubDate>Wed, 07 Jun 2023 07:05:00 +0000</pubDate><atom:updated>2023-06-07T14:07:25.980+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">news</category><category domain="http://www.blogger.com/atom/ns#">tech</category><title>Distribusi Android Tidak Kunjung Membaik</title><description>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKafCEYYfxxnMV4NlbWiHfYdhEZCcSyy_3lrY1OzOWgZ6V_lE_RckmQBXuUoYhusiNtx06YCzWD0DAugAsNg9OUeVqGSMZ_C-EoOor9FjQqdl_LT5GWSQ1VV4XjVyfmsEzkwVnqdBce7O6CfCtlZ6g8hmRfEDanOKiJRnlkfESVTSsmLaEHgVmKvPzmg/s943/new-budget-phone-or-old-flagship-resized-1.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="628" data-original-width="943" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKafCEYYfxxnMV4NlbWiHfYdhEZCcSyy_3lrY1OzOWgZ6V_lE_RckmQBXuUoYhusiNtx06YCzWD0DAugAsNg9OUeVqGSMZ_C-EoOor9FjQqdl_LT5GWSQ1VV4XjVyfmsEzkwVnqdBce7O6CfCtlZ6g8hmRfEDanOKiJRnlkfESVTSsmLaEHgVmKvPzmg/s320/new-budget-phone-or-old-flagship-resized-1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;


&lt;p style="text-align: justify;"&gt;Beragam upaya terbaik telah Google lakukan, namun&amp;nbsp;&lt;span style="text-align: left;"&gt;fragmentasi tetap menjadi masalah besar untuk Android dan mengakibatkan distribusi Android tidak terlihat berkembang dan merata. Selama 
bertahun-tahun, Google telah membuat beberapa bagian dari OS Android&amp;nbsp; menjadi modular untuk memungkinkan pembaruan yang lebih cepat.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="text-align: left;"&gt;Meskipun 
Samsung dan beberapa produsen perangkat lainnya sekarang merilis versi 
Android terbaru untuk perangkat mereka lebih cepat dari sebelumnya, 
masih banyak pekerjaan yang perlu dilakukan. Tidak heran Google telah 
membuat lebih sulit untuk melihat angka distribusi Android dan sekarang 
meng-update angka distribusi tersebut dengan frekuensi yang lebih rendah. Google sekarang telah mempublikasikan statistik distribusi terbaru untuk 
periode hingga 30 Mei 2023, yang menunjukkan pertumbuhan stabil dari 
Android 13.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Pada angka yang diterbitkan pada awal April 2023, Android 13 digunakan 
oleh 12% perangkat Android. Dalam dua bulan sejak itu, pangsa OS 
tersebut melonjak menjadi 15% (sumber: &lt;a href="https://twitter.com/MishaalRahman/status/1665823671192100864" rel="nofollow" target="_blank"&gt;Mishaal Rahman&lt;/a&gt;). Namun 
pertumbuhan ini belum cukup untuk melampaui Android 12 meskipun pangsa 
Android 12 mengalami penurunan dari 16,5% menjadi 16,3%. Dengan hampir 
semua perangkat flagship dari Samsung dan produsen perangkat lainnya 
kini menggunakan Android 13, kecepatan adopsinya akan terus melambat.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Android 11 tetap menjadi versi paling populer dari OS, dengan pangsa 
23,1%, turun dari 23,5% pada April 2023. OS Android versi ini dirilis pada September 
2020 dan masih digunakan di sebagian besar perangkat Android, hampir 2,5
 tahun setelah dirilis. Jika dilihat dari segi ini, dapat terlihat 
sejauh mana masalah fragmentasi yang tidak bagus di Android.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Yang lebih buruk lagi, Android 10, yang dirilis pada tahun 2019, merupakan rilis kedua paling populer dari OS ini dan masih digunakan oleh 17,8% perangkat. Ini merupakan penurunan sedikit dari 18,5% pada April 2023. Mengingat bahwa perangkat dengan Android 11 atau versi yang lebih lama sudah mencapai akhir masa pakainya, pangsa perangkat tersebut akan tetap stagnan atau perlahan menurun seiring dengan penggantian perlahan oleh perangkat baru.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Angka distribusi Android ini bisa saja menjadi lebih menyedihkan dalam beberapa bulan ke depan ketika Android 14 diluncurkan.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Kalau kalian sendiri masih setia pakai OS Android versi lawas atau selalu mengutamakan update terbaru?&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Sumber: &lt;a href="https://www.androidpolice.com/android-distribution-numbers-remain-depressing-ever/?utm_term=Autofeed&amp;amp;utm_medium=Social&amp;amp;utm_source=Twitter#Echobox=1686049347" rel="nofollow" target="_blank"&gt;androidpolice&lt;/a&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Headline image: &lt;a href="http://androidpolice.com"&gt;androidpolice.com&lt;/a&gt;&lt;/p&gt;</description><link>http://billnode.blogspot.com/2023/06/distribusi-android-tidak-kunjung-membaik.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKafCEYYfxxnMV4NlbWiHfYdhEZCcSyy_3lrY1OzOWgZ6V_lE_RckmQBXuUoYhusiNtx06YCzWD0DAugAsNg9OUeVqGSMZ_C-EoOor9FjQqdl_LT5GWSQ1VV4XjVyfmsEzkwVnqdBce7O6CfCtlZ6g8hmRfEDanOKiJRnlkfESVTSsmLaEHgVmKvPzmg/s72-c/new-budget-phone-or-old-flagship-resized-1.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-2551013830208809818</guid><pubDate>Thu, 25 May 2023 05:30:00 +0000</pubDate><atom:updated>2023-06-07T14:06:58.094+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">aplikasi</category><category domain="http://www.blogger.com/atom/ns#">installasi</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">nodejs</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Install Multiple Node.js Dengan NVM</title><description>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ZN59ucP5-00Lll7qkjHngQSX0vN1SNAUonYFLPyV3y0zr2yXbKM2wbdBU88M0cksLcsRjgOLWlGcFzFhOkYKMDPMUdx5Z6Iz8FSuY7vWJnQ3i7Y8VZzAZVTMILjDRrqgbYvHnWFaDza82YZwY0wAgrxXzdDfAn8NUQ1zkXJ_xq3KkdJDqgSIQZ49nA/s378/nvm.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="133" data-original-width="378" height="113" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ZN59ucP5-00Lll7qkjHngQSX0vN1SNAUonYFLPyV3y0zr2yXbKM2wbdBU88M0cksLcsRjgOLWlGcFzFhOkYKMDPMUdx5Z6Iz8FSuY7vWJnQ3i7Y8VZzAZVTMILjDRrqgbYvHnWFaDza82YZwY0wAgrxXzdDfAn8NUQ1zkXJ_xq3KkdJDqgSIQZ49nA/s320/nvm.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Kita tau ada banyak versi yg disediakan untuk menginstall &lt;b&gt;NodeJS&lt;/b&gt;. Tentu kita tidak perlu menggunakan semua versi yg tersedia, tetapi ada kasus dimana beberapa aplikasi yg kita buat ataupun yg kita handle harus dan masih menggunakan versi tertentu.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;p style="text-align: left;"&gt;Dengan kasus demikian, kita bisa manfaatkan &lt;b&gt;Node Version Manager (NVM) &lt;/b&gt;yg merupakan bash script sederhana untuk memudahkan pengguna mengelola beberapa versi NodeJS. Dengan &lt;b&gt;NVM&lt;/b&gt; ini memungkinkan kita menginstall beberapa versi sekaligus.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h4 style="text-align: left;"&gt;Install NVM (Node Version Manager) di Linux&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;&lt;p style="text-align: left;"&gt;Untuk menginstall &lt;b&gt;NVM&lt;/b&gt; di Linux, kita dapat menggunakan script installasi yg sudah disediakan.&lt;/p&gt;&lt;/div&gt;&lt;div class="code"&gt;$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash&lt;br /&gt;
OR&lt;br /&gt;$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash&lt;br /&gt;
&lt;/div&gt;&lt;p style="text-align: left;"&gt;Perintah tersebut akan melakukan proses cloning repository ke &lt;b&gt;~/.nvm&lt;/b&gt; direktori di home dan kemudian menyarankan pengguna untuk menambahkan command ke &lt;i&gt;shell startup script&lt;/i&gt; seperti &lt;b&gt;~/.bashrc&lt;/b&gt; dll. Copy dan paste semua perintah dibawah ini di terminal dan kemudian tekan Enter.&lt;/p&gt;&lt;div class="code"&gt;export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] &amp;amp;&amp;amp; printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"&lt;br /&gt;
[ -s "$NVM_DIR/nvm.sh" ] &amp;amp;&amp;amp; \. "$NVM_DIR/nvm.sh" # This loads nvm&lt;br /&gt;
&lt;/div&gt;&lt;p style="text-align: left;"&gt;Setelah proses di atas selesai di lakukan, jalankan perintah berikut dan kemudian restart terminal&lt;/p&gt;&lt;div class="code"&gt;$ source ~/.bashrc&lt;br /&gt;
OR&lt;br /&gt;
$ source ~/.profile&lt;br /&gt;
&lt;/div&gt;&lt;p style="text-align: left;"&gt;Kemudian buka kembali terminal dan jalankan perintah berikut untuk memastikan kalau &lt;b&gt;NVM&lt;/b&gt; benar sudah terinstall&lt;/p&gt;&lt;div class="code"&gt;$ nvm -v&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;Install Beberapa Versi Node.js&amp;nbsp;&lt;/h4&gt;&lt;div&gt;&lt;p style="text-align: left;"&gt;Setelah &lt;b&gt;NVM&lt;/b&gt; berhasil terinstall, langkah selanjutnya adalah mendownload NodeJS. Caranya cukup mudah dengan perintah berikut akan mendownload NodeJS versi terbaru&lt;/p&gt;&lt;/div&gt;&lt;div class="code"&gt;$ nvm install node
&lt;/div&gt;&lt;p style="text-align: left;"&gt;Dimisalkan kalian ingin menginstall versi yg spesifik, cukup berikan versi yg diinginkan untuk di install&lt;/p&gt;&lt;div class="code"&gt;$ nvm install 20.8.1
&lt;/div&gt;&lt;p style="text-align: left;"&gt;Dan untuk melihat versi yang aktif, jalankan perintah berikut&lt;/p&gt;&lt;div class="code"&gt;$ node -v&lt;br /&gt;
$ npm -v&lt;br /&gt;
&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;Menampilkan List Node.js&lt;/h4&gt;&lt;p&gt;Untuk melihat semua versi yg terinstall, cukup jalankan perintah berikut&lt;/p&gt;&lt;div class="code"&gt;$ nvm ls&lt;br /&gt;&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;v16.13.0&lt;br /&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp;v16.16.0&lt;br /&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;v18.6.0&lt;br /&gt;
-&amp;gt;     v18.14.1&lt;br /&gt;
default -&amp;gt; lts/* (-&amp;gt; v18.14.1)&lt;br /&gt;
iojs -&amp;gt; N/A (default)&lt;br /&gt;
unstable -&amp;gt; N/A (default)&lt;br /&gt;
node -&amp;gt; stable (-&amp;gt; v18.14.1) (default)&lt;br /&gt;
stable -&amp;gt; 18.14 (-&amp;gt; v18.14.1) (default)&lt;br /&gt;
lts/* -&amp;gt; lts/hydrogen (-&amp;gt; v18.14.1)&lt;br /&gt;
lts/argon -&amp;gt; v4.9.1 (-&amp;gt; N/A)&lt;br /&gt;
lts/boron -&amp;gt; v6.17.1 (-&amp;gt; N/A)&lt;br /&gt;&lt;br /&gt;
lts/carbon -&amp;gt; v8.17.0 (-&amp;gt; N/A)&lt;br /&gt;
lts/dubnium -&amp;gt; v10.24.1 (-&amp;gt; N/A)&lt;br /&gt;
lts/erbium -&amp;gt; v12.22.12 (-&amp;gt; N/A)&lt;br /&gt;
lts/fermium -&amp;gt; v14.21.3 (-&amp;gt; N/A)&lt;br /&gt;
lts/gallium -&amp;gt; v16.19.1 (-&amp;gt; N/A)&lt;br /&gt;
lts/hydrogen -&amp;gt; v18.14.1&lt;br /&gt;

&lt;/div&gt;&lt;p style="text-align: left;"&gt;Tanda panah &lt;b&gt;-&amp;gt; v18.14.1&lt;/b&gt; menandakan versi yg sedang aktif sebagai default.&lt;/p&gt;&lt;div&gt;&lt;h4 style="text-align: left;"&gt;Menentukan Versi NodeJS Untuk Terminal&lt;/h4&gt;&lt;/div&gt;&lt;p&gt;Ketika kita ingin menggunakan beberapa versi berbeda sekaligus, bisa kita lakukan dengan menjalankan beberapa terminal yg mana masing-masing kita tentukan versi NodeJS yg akan digunakan pada terminal nya. Misal:&lt;/p&gt;&lt;div class="code"&gt;------------ Terminal 1 ------------ &lt;br /&gt;
$ cd ~/projects/backend&lt;br /&gt;
$ nvm use 18.0.0&lt;br /&gt;
$ node -v&lt;br /&gt;
&lt;br /&gt;
------------ Terminal 2 ------------&lt;br /&gt;
$ cd ~/projects/frontend&lt;br /&gt;
$ nvm use 20.0.0&lt;br /&gt;
$ node -v&lt;br /&gt;
&lt;/div&gt;&lt;h4 style="text-align: left;"&gt;Mengaktifkan Versi Default Node.js&lt;/h4&gt;&lt;p&gt;Dan jika kalian ingin menentukan versi default yg akan digunakan, cukup jalankan perintah berikut&lt;/p&gt;&lt;div class="code"&gt;$ nvm alias default 18.14.1&lt;/div&gt;&lt;p&gt;Itulah beberapa cara sederhana dalam mengelola beberapa versi NodeJS menggunakan &lt;b&gt;NVM&lt;/b&gt;, dan juga kita tidak perlu menggunakan &lt;b&gt;sudo&lt;/b&gt; sama sekali. Dan jika kalian ingin tau lebih banyak dengan opsi yg disediakan, bisa kalian lihat melalui perintah &lt;b&gt;nvm --help &lt;/b&gt;atau langsung mengunjungi repository nya:&amp;nbsp;&lt;a href="https://github.com/nvm-sh/nvm" rel="nofollow" target="_blank"&gt;NVM Github&lt;/a&gt;.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Headline image: &lt;a href="http://github.com"&gt;github.com&lt;/a&gt;&lt;/div&gt;</description><link>http://billnode.blogspot.com/2023/05/cara-install-multiple-nodejs-dengan-nvm.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6ZN59ucP5-00Lll7qkjHngQSX0vN1SNAUonYFLPyV3y0zr2yXbKM2wbdBU88M0cksLcsRjgOLWlGcFzFhOkYKMDPMUdx5Z6Iz8FSuY7vWJnQ3i7Y8VZzAZVTMILjDRrqgbYvHnWFaDza82YZwY0wAgrxXzdDfAn8NUQ1zkXJ_xq3KkdJDqgSIQZ49nA/s72-c/nvm.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-5321198165970688510</guid><pubDate>Fri, 19 May 2023 07:20:00 +0000</pubDate><atom:updated>2023-06-07T14:06:32.703+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">aplikasi</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Shortcut Favorit pada VS Code Text Editor</title><description>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiIuJSDEy0q_CUZ3jBe3lL0VV-yCljjg8hNTqbukM-FVkY_gH7qzCaN3h01Wa_bfM4AD6UTm4IZFk0FzvZpIZGp8AQDoIH4UNnhPWkW6gHQaQD0873oKFkyJcCTNkujiG-WgEo1k4kc1Lys_VVWGvIPv4Kslccx4Qs1cHKzFBZ_aXb-tlqqiIgrTYedg/s1280/Vscode-shortcuts.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="720" data-original-width="1280" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiIuJSDEy0q_CUZ3jBe3lL0VV-yCljjg8hNTqbukM-FVkY_gH7qzCaN3h01Wa_bfM4AD6UTm4IZFk0FzvZpIZGp8AQDoIH4UNnhPWkW6gHQaQD0873oKFkyJcCTNkujiG-WgEo1k4kc1Lys_VVWGvIPv4Kslccx4Qs1cHKzFBZ_aXb-tlqqiIgrTYedg/s320/Vscode-shortcuts.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;


&lt;p style="text-align: justify;"&gt;Tidak diragukan lagi bahwa VS Code adalah salah satu text editor yg populer saat ini. Tidak seperti Vim yang legendaris, VS Code tidak mengharuskan kita untuk melakukan konfigurasi yg rumit tetapi kita diberikan banyak fitur menarik.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;VS Code menyediakan banyak tombol Shortcuts yg bermanfaat utk kita dalam melakukan development dan dapat meningkatkan flow kerja kita, karena dengan Shortcuts dapat membantu mempercepat alur kerja tanpa harus menggunakan mouse. Meski begitu, kita harus bisa membiasakan diri menggunakannya agar secara otomatis kita bisa menghafal Shortcuts tersebut.&lt;/p&gt;&lt;p&gt;Berikut ini beberapa&amp;nbsp;VS Code Keyboard Shortcuts yg bermanfaat, diantaranya:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. Menampilkan Semua Commands&lt;/p&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + SHIFT + P or F1&lt;/td&gt;
&lt;td&gt;SHIFT + ⌘ + P or F1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ini adalah shortcut yang paling berguna, shortcut ini membuka &lt;i&gt;&lt;b&gt;Command Palette&lt;/b&gt;&lt;/i&gt; yang menyediakan akses ke semua fungsionalitas VS Code.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsaDuPeki4Y7-mxFejTBx4TpCGqbBfKnacWPK0ag6mjsSipOe3vZQpRju_ppGP2P0vZTj-VKHGKt7MVCRODPg-TcDMHP-sFwP_UU1i9V9bluYn2xIwamGjKMN1OfATXOm0wRZMa5hfQbvtaEBs9yDexjX71YLNsLDpmQmRzYtqn_tev3BrLGQvf3ErLA/s800/Command-Palette.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="418" data-original-width="800" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsaDuPeki4Y7-mxFejTBx4TpCGqbBfKnacWPK0ag6mjsSipOe3vZQpRju_ppGP2P0vZTj-VKHGKt7MVCRODPg-TcDMHP-sFwP_UU1i9V9bluYn2xIwamGjKMN1OfATXOm0wRZMa5hfQbvtaEBs9yDexjX71YLNsLDpmQmRzYtqn_tev3BrLGQvf3ErLA/s320/Command-Palette.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;command palette (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="text-align: justify;"&gt;Pada &lt;i&gt;&lt;b&gt;Command Palette&lt;/b&gt;&lt;/i&gt;&amp;nbsp;ini kita bisa melakukah hal seperti membuat file baru, membuka pengaturan, mengubah tema, dan melihat semua Shortcuts.&lt;/p&gt;&lt;p&gt;2. Split VS Code Editor Secara Vertical dan Horizontal&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + \&lt;/td&gt;
&lt;td&gt;⌘ + \&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Yg satu ini cukup membantu bagi kita yg tidak menggunakan multiple-monitor, karena dengan hanya 1 monitor saja kita masih bisa melihat file berbeda dalam 1 tampilan, baik secara horizontal maupun vertical.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFjrhvjqEJZ82uyZqGRFXsRwh18xXMHyEiNwMZvp5rIaM7TBsW12Yx-Onvjx0Cbt2GeMMnTeqGuPoi4kEHZJU72iwRAseSh8uPOk7YI0QZymFZ2KXtF8TK9KliZv6MiIJMsx4QO4bpCUV3cO4c_jxmS4CfmWdasnjw2dA-TkEXkLzpwizldED66shgOA/s800/Split-VS-Code.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="405" data-original-width="800" height="162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFjrhvjqEJZ82uyZqGRFXsRwh18xXMHyEiNwMZvp5rIaM7TBsW12Yx-Onvjx0Cbt2GeMMnTeqGuPoi4kEHZJU72iwRAseSh8uPOk7YI0QZymFZ2KXtF8TK9KliZv6MiIJMsx4QO4bpCUV3cO4c_jxmS4CfmWdasnjw2dA-TkEXkLzpwizldED66shgOA/s320/Split-VS-Code.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;split editor (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Dan kalaupun kita mau berganti fokus, kita juga bisa lakukan melalui Shortcuts.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + 1/2/3&lt;/td&gt;
&lt;td&gt;⌘ + 1/2/3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + K CTRL + ←/→&lt;/td&gt;
&lt;td&gt;⌘ + K ⌘ + ←/→&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3. Menampilkan Integrated Terminal&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + `&lt;/td&gt;
&lt;td&gt;⌘ + `&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Integrated terminal adalah&amp;nbsp;fitur yang sangat membantu yang memungkinkan kita menjalankan perintah dengan cepat tanpa harus berpindah jendela. Untuk menyembunyikan/memunculkan terminal di editor, shortcut ini tentu sangat berguna.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsStGjB1efcIfo1LqW8fSgYDw8P23XumptuxikTYIUIUhyzVrDHyDsRAJ724EtUdxhHc6ZiyGFXWRC-KIhZIl08_etxE01gDJasmr8lfzT9XT-9BbaSv7DuxjFSl6u2yDt1-y2MPRw33wnrK_UnlOT5fRScUCwqQUsgPzHP37LMHFQkhylhekpw2Aidw/s800/Integrated-Terminal.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="221" data-original-width="800" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsStGjB1efcIfo1LqW8fSgYDw8P23XumptuxikTYIUIUhyzVrDHyDsRAJ724EtUdxhHc6ZiyGFXWRC-KIhZIl08_etxE01gDJasmr8lfzT9XT-9BbaSv7DuxjFSl6u2yDt1-y2MPRw33wnrK_UnlOT5fRScUCwqQUsgPzHP37LMHFQkhylhekpw2Aidw/s320/Integrated-Terminal.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;integrated terminal (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Jika shortcut tersebut sulit dijangkau, kita juga bisa lakukan melalui &lt;i&gt;&lt;b&gt;command palette&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2qNNtlv6l3ovbLyA2NTHcKEP7ACS38Em3R5zq0UoqwCfcz2WPJkiVf32OClsyhRbRnfL3_ombTm6v2GismSZ8edAtbABi8vTcnCvcQ9kXreXOeSVvNcmvGaODLxkLyGfSAk-XFqFERs3HvvtkZkX0uSzGwOM4ASozV7BNiLSGsuqT5MZP9cgmgarpIg/s686/Toggle-Terminal-Using-Command-Palette.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="118" data-original-width="686" height="55" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2qNNtlv6l3ovbLyA2NTHcKEP7ACS38Em3R5zq0UoqwCfcz2WPJkiVf32OClsyhRbRnfL3_ombTm6v2GismSZ8edAtbABi8vTcnCvcQ9kXreXOeSVvNcmvGaODLxkLyGfSAk-XFqFERs3HvvtkZkX0uSzGwOM4ASozV7BNiLSGsuqT5MZP9cgmgarpIg/s320/Toggle-Terminal-Using-Command-Palette.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;toggle terminal (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Go To File&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + P&lt;/td&gt;
&lt;td&gt;⌘ + P&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dimisalkan project kita sudah cukup besar, tentu mencari file cukup sulit. Oleh karena itu, kita bisa manfaatkan Shortcut utk mencari file yg ingin kita buka hanya dengan bantuan shortcut.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH_Flf1tnvrwLe27fpF_BNDiRiRjzerpnf5Pea1sWobPLJxPSfT51sy-awy0iuSUWtQRHEspmq-OUSGdWfi_36lM2Ne-FMVP6MzpdpLloHKAZp7zNCBWCoQVr8svi4uj0A2WVu1ohoY5q_59wTiBnWO9GCaYvgaos4anS4qGdYM6V56jVx9ikmuNBbwg/s800/Go-to-file.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="388" data-original-width="800" height="155" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH_Flf1tnvrwLe27fpF_BNDiRiRjzerpnf5Pea1sWobPLJxPSfT51sy-awy0iuSUWtQRHEspmq-OUSGdWfi_36lM2Ne-FMVP6MzpdpLloHKAZp7zNCBWCoQVr8svi4uj0A2WVu1ohoY5q_59wTiBnWO9GCaYvgaos4anS4qGdYM6V56jVx9ikmuNBbwg/s320/Go-to-file.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;open file (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Toggle Comment&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + /&lt;/td&gt;
&lt;td&gt;⌘ + /&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Jika kita ingin dengan mudah menambahkan komentar pada kode, kita bisa lakukan dengan bantuan shortcut yg mana juga mendukung utk menambahkan komentar dalam mode block ataupun single kode.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht8AtlZzil7pIF-baFbyyr7pDkyVMO1acegosZc5ToYS4WjPcLJKI9867dYaXdMeWN8scWgYRq4z7ElS-UhPOLxoWKYTL75FDZJc9Wnqhe1PJNXkKp2LzXpbmwP6rrA2_eNHOh9vjy7Rsz0G5-iZstNsNMSsCHdBasfNYMkppVFvpng6ijUtt-Uu-3aA/s800/Comment-out-code.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="313" data-original-width="800" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht8AtlZzil7pIF-baFbyyr7pDkyVMO1acegosZc5ToYS4WjPcLJKI9867dYaXdMeWN8scWgYRq4z7ElS-UhPOLxoWKYTL75FDZJc9Wnqhe1PJNXkKp2LzXpbmwP6rrA2_eNHOh9vjy7Rsz0G5-iZstNsNMSsCHdBasfNYMkppVFvpng6ijUtt-Uu-3aA/s320/Comment-out-code.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;comment code (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;6. Find And Replace&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table class="styled-tb"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Windows/Linux&lt;/th&gt;
&lt;th&gt;macOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + F&lt;/td&gt;
&lt;td&gt;⌘ + F&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CTRL + H&lt;/td&gt;
&lt;td&gt;⌥ + ⌘ + F&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dan yg terakhir, mencari dan mengganti text secara bersamaan. Situasi ini tentu tidak jarang diperlukan, dimana kita ingin mengganti nama variabel sebagai contoh. Hal ini dapat dilakukan melalui shortcut yg sudah disediakan. Bahkan juga fitur ini dapat mengganti text bukan hanya pada 1 file saja, melainkan beberapa file sekaligus.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UbIqSZv1GvSQztCkgBjXvCPPu34Vo3mdgVPXbdLoNDYmjfY4XnlC0X9Cra2nfrDGtLUiVRDD0w7OWM1SsB_h9HrOo4l97zTPX1leRXH1-6tIBzVw2U2ceyUatOvJL-W_AIZtd9IX4anoOXdVh1GQE28G4x-noQAhtjwTpOXuvNQRQUAKswDaE-qQIw/s800/Find-and-replace.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="223" data-original-width="800" height="89" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UbIqSZv1GvSQztCkgBjXvCPPu34Vo3mdgVPXbdLoNDYmjfY4XnlC0X9Cra2nfrDGtLUiVRDD0w7OWM1SsB_h9HrOo4l97zTPX1leRXH1-6tIBzVw2U2ceyUatOvJL-W_AIZtd9IX4anoOXdVh1GQE28G4x-noQAhtjwTpOXuvNQRQUAKswDaE-qQIw/s320/Find-and-replace.webp" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;find &amp;amp; replace (itfoss.com)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Itulah beberapa Shortcuts bermanfaat yg dapat kita gunakan dalam proses membantu meningkatkan menjadi lebih produktif dan meningkatkan flow kerja kita. Masih banyak Shortcuts lainnya yg mungkin bisa kalian gunakan, tapi beberapa diantaranya di atas adalah yg umum digunakan pada sebagian Developer.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sumber:&amp;nbsp;&lt;a href="https://itsfoss.com/vs-code-shortcuts/" rel="nofollow" style="color: #3d85c6;" target="_blank"&gt;VS Code Shortcuts&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Headline image: &lt;a href="http://crio.do"&gt;crio.do&lt;/a&gt;&lt;/div&gt;</description><link>http://billnode.blogspot.com/2023/05/shortcut-favorit-pada-vs-code-text.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiIuJSDEy0q_CUZ3jBe3lL0VV-yCljjg8hNTqbukM-FVkY_gH7qzCaN3h01Wa_bfM4AD6UTm4IZFk0FzvZpIZGp8AQDoIH4UNnhPWkW6gHQaQD0873oKFkyJcCTNkujiG-WgEo1k4kc1Lys_VVWGvIPv4Kslccx4Qs1cHKzFBZ_aXb-tlqqiIgrTYedg/s72-c/Vscode-shortcuts.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-4720592286968770482</guid><pubDate>Tue, 04 May 2021 04:11:00 +0000</pubDate><atom:updated>2022-08-14T15:28:03.325+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">simple and useful</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><title>Cara Menarik Menampilkan Informasi Sistem Linux Di Terminal </title><description>&lt;p&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6b34aqOiCv6ceZe1dZN2e0arioSmExxeuR32_Vke5Jlnha_fBszkdCJWnBE52rLWo2hjfeCnlhAFXY5YgJf418lLKPZtc4xw-sHtFezldGQbYUQpFbv8jiM6kAqzuxc0axbCdOHoRy5ob/s718/Screenshot_2021-05-04_10-28-06.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img loading="lazy" alt="headline" border="0" data-original-height="358" data-original-width="718" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6b34aqOiCv6ceZe1dZN2e0arioSmExxeuR32_Vke5Jlnha_fBszkdCJWnBE52rLWo2hjfeCnlhAFXY5YgJf418lLKPZtc4xw-sHtFezldGQbYUQpFbv8jiM6kAqzuxc0axbCdOHoRy5ob/w640-h320/Screenshot_2021-05-04_10-28-06.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Sering kali kita lihat screenshot seperti gambar diatas, terminal yang menampilkan informasi CPU dan Linux yang dipakai menggunakan ASCII. Ini bukanlah hal baru, tapi mungkin bagi sebagian orang masih belum mengetahuinya.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ada beberapa &lt;i&gt;tools&lt;/i&gt; terkait yang bisa digunakan, seperti &lt;i&gt;neofetch, cpufetch &lt;/i&gt;dan &lt;i&gt;screenfetch&lt;/i&gt;, tapi pada artike lini saya akan menggunakan &lt;i&gt;screenfetch&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Tools &lt;/i&gt;ini menampilkan informasi yaitu:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Versi Linux&lt;/li&gt;&lt;li&gt;System Model&lt;/li&gt;&lt;li&gt;Kernel&lt;/li&gt;&lt;li&gt;Uptime&lt;/li&gt;&lt;li&gt;Packages&lt;/li&gt;&lt;li&gt;Versi Shell&lt;/li&gt;&lt;li&gt;Resolusi Layar&lt;/li&gt;&lt;li&gt;Desktop Environment&lt;/li&gt;&lt;li&gt;Windows Manager&lt;/li&gt;&lt;li&gt;Tema dan Ikon&lt;/li&gt;&lt;li&gt;Terminal&lt;/li&gt;&lt;li&gt;CPU, GPU dan informasi RAM&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Tujuan dari tools ini sebenarnya hanya untuk berbagi informasi seperti Linux, tema dan ikon yang dipakai beserta informasi sistem melalui sebuah &lt;i&gt;screenshot &lt;/i&gt;yang akan diberikan kepada user disebuah grup ataupun forum.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;INSTALL SCREENFETCH&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Installasi bisa dilakukan melalui package manager pada beragam Linux, nama package sepertinya sama meskipun berbeda distribusi, seperti contoh perintah berikut install screenfetch di Ubuntu dan ArchLinux.&lt;/p&gt;

&lt;div class="code"&gt;
$ sudo pacman -Sy screenfetch   (archlinux)&lt;br /&gt;
$ sudo apt-get install screenfetch  (debian/ubuntu)
&lt;/div&gt;
&lt;p&gt;Untuk menggunakannya tidaklah sulit, cukup jalankan perintah dibawah untuk mengambil screenshot atau kalian bisa tetap menggunakan keyboard screenshot secara manual.&lt;br /&gt;&lt;/p&gt;

&lt;div class="code"&gt;
$ screenfetch -s
&lt;/div&gt;
&lt;p&gt;Selamat mencoba dan jangan lupa tinggalkan komentar jika ada tool lain yang mungkin lebih menarik.&lt;br /&gt;&lt;/p&gt;

</description><link>http://billnode.blogspot.com/2021/05/cara-menarik-menampilkan-informasi.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6b34aqOiCv6ceZe1dZN2e0arioSmExxeuR32_Vke5Jlnha_fBszkdCJWnBE52rLWo2hjfeCnlhAFXY5YgJf418lLKPZtc4xw-sHtFezldGQbYUQpFbv8jiM6kAqzuxc0axbCdOHoRy5ob/s72-w640-h320-c/Screenshot_2021-05-04_10-28-06.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-7200393750437053233</guid><pubDate>Mon, 03 May 2021 06:46:00 +0000</pubDate><atom:updated>2022-08-14T15:28:24.805+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">animasi</category><category domain="http://www.blogger.com/atom/ns#">disain</category><category domain="http://www.blogger.com/atom/ns#">enve</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tech</category><title>Enve: Aplikasi Disain Animasi 2D Gratis</title><description>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzvIU414WYpxJ0XZl5MpavFocs4dxtoLnm0KzmMPOZ5xG6ktuJfQ-z5CX5KHqwxwgzNe2N03zoAWO42YwJysZXfeEP3MOUpSosNqiOPUMVblY_DEFr7PDhvOp-79Wb9ofoS-U3tkUy856/s1920/Screenshot_2021-05-03_13-13-03.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" loading="lazy" alt="headline" data-original-height="1080" data-original-width="1920" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzvIU414WYpxJ0XZl5MpavFocs4dxtoLnm0KzmMPOZ5xG6ktuJfQ-z5CX5KHqwxwgzNe2N03zoAWO42YwJysZXfeEP3MOUpSosNqiOPUMVblY_DEFr7PDhvOp-79Wb9ofoS-U3tkUy856/w640-h360/Screenshot_2021-05-03_13-13-03.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Aplikasi disain animasi 2D &lt;i&gt;Enve &lt;/i&gt;adalah salah satu aplikasi yang cukup menarik. Meskipun disain animasi 3D sudah cukup umum dan makin banyak digunakan seiring dengan perangkat keras dengan teknologi yang makin canggih, namun disain animasi 2D masih banyak disukai bagi sebagian&lt;i&gt; &lt;/i&gt;disainer.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Aplikasi ini sudah mendukung &lt;i&gt;cross-platform &lt;/i&gt;sehingga memudahkan pengguna yang suka berganti OS, baik Linux, macOS maupun Windows. Dan juga aplikasi ini Open Source yang menjadi nilai penting karena kita tidak perlu mengeluarkan uang untuk menggunakannya.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8kgtM7xysyck8QjefLt_5QonISVKACTTNHs4wY4A3nJu2qHZIh7I_OyuBI8UL40ZJCLYO9jDUSOnqVb6oTd0ooUNBvihvqBjFcETdzBQhayV82SO6Hz9gG0fK6EiTG9hhRiXXFsgtsm3T/s1920/70745938-36e20900-1d25-11ea-9bdf-78d3fe402291.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="1080" data-original-width="1920" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8kgtM7xysyck8QjefLt_5QonISVKACTTNHs4wY4A3nJu2qHZIh7I_OyuBI8UL40ZJCLYO9jDUSOnqVb6oTd0ooUNBvihvqBjFcETdzBQhayV82SO6Hz9gG0fK6EiTG9hhRiXXFsgtsm3T/w640-h360/70745938-36e20900-1d25-11ea-9bdf-78d3fe402291.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;maurycyliebner.github.io&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Fitur utama dari aplikasi ini diantaranya yaitu:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Timeline animation&lt;/li&gt;&lt;li&gt;Mendukung beragam obyek seperti &lt;i&gt;curve, ellipse, rectangle, text &lt;/i&gt;dll&lt;/li&gt;&lt;li&gt;Dukungan &lt;i&gt;multiple scene &lt;/i&gt;per proyek&lt;/li&gt;&lt;li&gt;Import gambar, video dan audio&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ingin melihat cara penggunaanya? Sudah ada official video dari &lt;i&gt;Enve&lt;/i&gt; yang mendemonstrasikan cara membuat sebuah intro.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/4Yg6RtBcjso" width="621" youtube-src-id="4Yg6RtBcjso"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;Kalian bisa langsung lihat kumpulan video yang sudah disediakan oleh &lt;a href="https://www.youtube.com/channel/UCjvNO3xdIQs-cpgwSf0mX5Q/videos" rel="nofollow"&gt;&lt;i&gt;Youtube Enve&lt;/i&gt;&lt;/a&gt;&lt;i&gt;. &lt;/i&gt;Ada banyak video yang bisa digunakan sebagai media pembelajaran membuat animasi 2D.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;INSTALL ENVE&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Installasi aplikasi ini tidak sulit, cukup download file AppImage dan berikan &lt;i&gt;execute permission &lt;/i&gt;&lt;b&gt;&lt;/b&gt;dan langsung bisa dijalankan. &lt;a href="https://github.com/MaurycyLiebner/enve/releases/tag/continuous-linux" rel="nofollow"&gt;Download Enve&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bagi kalian yang berfrofesi sebagai disainer, aplikasi ini bisa menjadi alternatif atau bahkan sebagai aplikasi utama untuk membuat animasi, selamat mencoba.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Headline image: &lt;a href="http://maurycyliebner.github.io" rel="nofollow"&gt;Enve&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://billnode.blogspot.com/2021/05/enve-aplikasi-disain-animasi-2d-gratis.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipzvIU414WYpxJ0XZl5MpavFocs4dxtoLnm0KzmMPOZ5xG6ktuJfQ-z5CX5KHqwxwgzNe2N03zoAWO42YwJysZXfeEP3MOUpSosNqiOPUMVblY_DEFr7PDhvOp-79Wb9ofoS-U3tkUy856/s72-w640-h360-c/Screenshot_2021-05-03_13-13-03.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-2765232550943950298</guid><pubDate>Fri, 30 Apr 2021 07:34:00 +0000</pubDate><atom:updated>2022-08-14T15:28:33.546+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">mysql</category><category domain="http://www.blogger.com/atom/ns#">server</category><title>Mengatasi MySQL 1045 Error Access Denied</title><description>&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxIuiImicu_92X42aFkWxVoBvcHVmNwbgLONA8D6CW0YIpNy3WjZBadHiFMIpvi0HTqVR99YxTqAXNS9Aev7jOwurXXIiOPOKgjdlInQkzl4GwvhQJIuBTvGZN9EREs2dsqjOhDovID_8a/s1024/mysql-error-1045-1024x512.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" loading="lazy" alt="headline" data-original-height="512" data-original-width="1024" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxIuiImicu_92X42aFkWxVoBvcHVmNwbgLONA8D6CW0YIpNy3WjZBadHiFMIpvi0HTqVR99YxTqAXNS9Aev7jOwurXXIiOPOKgjdlInQkzl4GwvhQJIuBTvGZN9EREs2dsqjOhDovID_8a/w640-h320/mysql-error-1045-1024x512.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Menggunakan MySQL Database Server tidak jarang kita temui error yang entah kenapa itu terjadi misalnya seperti MySQL 1045 Error Access Denied. Yang menjadi alasan sulit diatasi mungkin karena pesan yang tidak kita perhatikan secara detail sehingga menjadi sulit untuk diatasi.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;MySQL menggunakan kode unik untuk merujuk pada error tertentu, jadi sebenarnya bisa kita lihat langsung didokumentasi resminya. Seperti contoh di atas kode &lt;i&gt;1045 &lt;/i&gt;mungkin kalian pernah alami atau saat ini mengalaminya. Mari kita lihat beberapa hal pemicu error tersebut.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;1. Terhubung ke &lt;i&gt;Host &lt;/i&gt;yang salah&lt;/b&gt;&lt;/p&gt;

&lt;div class="code"&gt;
[dev@server]# mysql -u root -p12345&lt;br /&gt;
mysql: [Warning] Using a password on the command line interface can be insecure. &lt;br /&gt;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)&lt;br /&gt;
&lt;/div&gt;

&lt;p&gt;Jika tidak secara spesifik terhubung ke host tertentu (&lt;i&gt;-h flag&lt;/i&gt;), MySQL &lt;i&gt;client&lt;/i&gt; akan mencoba akses ke &lt;i&gt;localhost&lt;/i&gt; yang mungkin sebenarnya kita ingin akses ke &lt;i&gt;host &lt;/i&gt;lain. Jadi perlu kita cek kembali akses yang ingin kita gunakan.&lt;/p&gt;

&lt;div class="code"&gt;
[dev@server]# mysql -u root -p12345 -h &lt;ip&gt; -P 3306
&lt;/ip&gt;&lt;/div&gt;
&lt;p&gt;&lt;b&gt;2. User tidak ditemukan&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class="code"&gt;
[dev@server]# mysql -u newuser -p12345 -h localhost&lt;br /&gt;
mysql: [Warning] Using a password on the command line interface can be insecure.&lt;br /&gt;
ERROR 1045 (28000): Access denied for user 'newuser'@'localhost' (using password: YES)
&lt;/div&gt;
&lt;p&gt;Pastikan &lt;i&gt;user&lt;/i&gt; yang digunakan ada tersimpan didalam tabel &lt;i&gt;user&lt;/i&gt;. Jika tidak ditemukan, bisa kita buat dulu &lt;i&gt;user &lt;/i&gt;tersebut. Bisa dibilang menggunakan non-root &lt;i&gt;user &lt;/i&gt;adalah &lt;i&gt;best practice &lt;/i&gt;dan jangan dibiasakan menggunakan &lt;i&gt;root user&lt;/i&gt;.&lt;br /&gt;&lt;/p&gt;

&lt;div class="code"&gt;
mysql&amp;gt; SELECT User FROM mysql.user WHERE User='newuser';&lt;br /&gt;
Empty set (0.00 sec)&lt;br /&gt;&lt;br /&gt;
mysql&amp;gt; CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'sekret';&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)
  
&lt;/div&gt;
&lt;p&gt;3. &lt;b&gt;Client tidak ada &lt;i&gt;permission access &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;
&lt;div class="code"&gt;
[dev@server]# mysql -u newuser -p12345&lt;br /&gt;
mysql: [Warning] Using a password on the command line interface can be insecure.&lt;br /&gt;
ERROR 1045 (28000): Access denied for user 'newuser'@'localhost' (using password: YES)
&lt;/div&gt;
&lt;p&gt;Bisa kita cek informasinya melalui perintah berikut ini:&lt;/p&gt;&lt;p&gt;dsini&lt;br /&gt;&lt;/p&gt;
&lt;div class="code"&gt;
mysql&amp;gt; SELECT Host, User FROM mysql.user WHERE User='newuser';&lt;br /&gt;
+-------------+-------------+&lt;br /&gt;
| Host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| User&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;br /&gt;
+-------------+-------------+&lt;br /&gt;
| 172.17.0.1 | newuser&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+-------------+-------------+&lt;br /&gt;
1 row in set (0.00 sec)
&lt;/div&gt;
&lt;p&gt;Lalu kita bisa lihat dari IP mana &lt;i&gt;client &lt;/i&gt;mencoba akses ke &lt;i&gt;database&lt;/i&gt;.&lt;/p&gt;
&lt;div class="code"&gt;
  [dev@server]# ip address | grep inet | grep -v inet6&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
    inet 172.17.0.20/24 brd 172.17.0.255 scope global dynamic wlp3s0
&lt;/div&gt;
&lt;p&gt;Untuk mengatasi ini cukup tentukan IP yang kita gunakan di &lt;i&gt;client&lt;/i&gt;, atau cara yang paling mudah adalah dengan menggunakan tanda &lt;i&gt;'%' &lt;/i&gt;yang otomatis akan memperbolehkan akses dari segala IP.&lt;/p&gt;
&lt;div class="code"&gt;
mysql&amp;gt; CREATE USER 'newuser'@'%' IDENTIFIED BY '12345';&lt;br /&gt;
Query OK, 0 rows affected (0.00 sec)
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;4. Password salah&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Hal ini mungkin saja terjadi, kita lupa password atau kita sudah ganti password dan tidak mengingat password yang baru. Cara mengeceknya cukup mudah, pastikan kolom &lt;b&gt;forgotten&lt;i&gt; &lt;/i&gt;&lt;/b&gt;sama dengan kolom &lt;b&gt;authentication_string&lt;/b&gt;, dan pastikan juga password yang kita gunakan sudah benar untuk &lt;i&gt;user &lt;/i&gt;dan &lt;i&gt;host &lt;/i&gt;yang sesuai.&lt;/p&gt;
&lt;div class="code"&gt;
mysql&amp;gt; SELECT authentication_string, PASSWORD('123456') FROM mysql.user WHERE User='newuser';  &lt;br /&gt;
+-------------------------------------------+---------------------------+&lt;br /&gt;
| authentication_string&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| PASSWORD('123456')&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;
+-------------------------------------------+---------------------------+&lt;br /&gt;
| *827CCB0EEA8A706C4C34A16891F84E7B | *E10ADC3949BA59ABBE56E057F20F883E |&lt;br /&gt;
| *827CCB0EEA8A706C4C34A16891F84E7B | *E10ADC3949BA59ABBE56E057F20F883E |&lt;br /&gt;
+-------------+-------------+-------------------------------------------+&lt;br /&gt;
2 rows in set, 1 warning (0.00 sec)
&lt;/div&gt;
&lt;p&gt;Mudahnya, kita bisa ganti password langsung dengan perintah berikut:&lt;/p&gt;

&lt;div class="code"&gt;
mysql&amp;gt; set password for 'newuser'@'%' = 'abc123'; &lt;br /&gt;
Empty set (0.00 sec)
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;5. Symbol pada password di Convert&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ini pernah saya alami, ternyata kendala ada di terminal yang digunakan, password otomatis dikonversi oleh &lt;b&gt;Bash&lt;/b&gt;. Untuk mengatasinya, gunakan passwrod dalam tanda petik &lt;b&gt;(')&lt;/b&gt;.&lt;/p&gt;
&lt;div class="code"&gt;
[dev@server]# mysql -u newuser -pstrong!pas$word&lt;br /&gt;
mysql: [Warning] Using a password on the command line interface can be insecure.&lt;br /&gt;
ERROR 1045 (28000): Access denied for user 'nonexistant'@'localhost' (using password: YES)&lt;br /&gt;&lt;br /&gt;
[dev@server]# mysql -u newuser -p'strong!pas$word'&lt;br /&gt;
mysql: [Warning] Using a password on the command line interface can be insecure&lt;br /&gt;
...&lt;br /&gt;
mysql&amp;gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jika kalian tidak punya akses sama sekali ke dalam MySQL shell, berikut ini beberapa langkah yang bisa digunakan untuk mengatasinya.&lt;/p&gt;

&lt;ul style="text-align: left;"&gt;
  &lt;li&gt;Matikan service MySQL&lt;/li&gt;&lt;li&gt;Modifikasi &lt;i&gt;my.cnf &lt;/i&gt;dan tambahkan &lt;span&gt; &lt;i&gt;skip-grant-tables&lt;/i&gt; dibawah &lt;b&gt;[mysqld]&lt;/b&gt;. Pada MySQL versi 8.x, efek dari &lt;i&gt;config &lt;/i&gt;tersebut sudah otomatis berjalan (hanya berlaku untuk &lt;i&gt;localhost&lt;/i&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Nyalakan kembali service MySQL&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Akses dengan user root: &lt;i&gt;mysql -u root -h localhost&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Ganti password dengan yang baru: &lt;/span&gt;&lt;i&gt;UPDATE mysql.user SET authentication_string=PASSWORD(‘abc123’) WHERE User=’root’ and Host=’localhost’;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Matikan service MySQL&lt;/li&gt;&lt;li&gt;Hapus &lt;i&gt;skip-grant-tables &lt;/i&gt;dari&lt;i&gt; &lt;/i&gt;&lt;b&gt;[mysqld]&lt;/b&gt;&lt;i&gt;&lt;b&gt; &lt;/b&gt;&lt;/i&gt;(jika kalian tambahkan sebelumnya)&lt;/li&gt;&lt;li&gt;Nyalakan kembali MySQL&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Dengan begitu kita sudah bisa kembali mendapatkan akses ke MySQL dengan &lt;i&gt;user root&lt;/i&gt;. Itulah beberapa kendala dan cara menangani masalah yang terkait dengan MySQL 1045 Error Access Denied. Semoga dapat membantu kalian, selamat mencoba dan jangan lupa berikan komentar jika masih terkendala.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sumber: &lt;a href="https://www.percona.com/blog/2019/07/05/fixing-a-mysql-1045-error/" rel="nofollow"&gt;percona&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Headline image: &lt;a href="http://kinsta.com" rel="nofollow"&gt;kinsta&lt;/a&gt; &lt;/p&gt;</description><link>http://billnode.blogspot.com/2021/04/mengatasi-mysql-1045-error-access-denied.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxIuiImicu_92X42aFkWxVoBvcHVmNwbgLONA8D6CW0YIpNy3WjZBadHiFMIpvi0HTqVR99YxTqAXNS9Aev7jOwurXXIiOPOKgjdlInQkzl4GwvhQJIuBTvGZN9EREs2dsqjOhDovID_8a/s72-w640-h320-c/mysql-error-1045-1024x512.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-5795978387359749037</guid><pubDate>Tue, 27 Apr 2021 06:55:00 +0000</pubDate><atom:updated>2022-08-14T15:28:42.089+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">partisi</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Menghapus Partisi di Linux</title><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6CY2Xh9JFrz-liI-O4X2DwoKkcNbnBdNe9LDPKP5zc5k4BMCj9144RvO9eQHBd6jJI2sACUv_sp6FaxqmP6RtcCbNw7YmIMi2fQ6qQGlTNPgBgHV8RhIiYIAMXtKIvRayIr_SE3G-Ivm2/s799/how-to-delete-partition-in-linux.png"&gt;&lt;img border="0" loading="lazy" alt="headline" data-original-height="400" data-original-width="799" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6CY2Xh9JFrz-liI-O4X2DwoKkcNbnBdNe9LDPKP5zc5k4BMCj9144RvO9eQHBd6jJI2sACUv_sp6FaxqmP6RtcCbNw7YmIMi2fQ6qQGlTNPgBgHV8RhIiYIAMXtKIvRayIr_SE3G-Ivm2/w640-h320/how-to-delete-partition-in-linux.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Managemen partisi pada Linux sudah menjadi hal wajib yang perlu diketahui penggunanya. Terkadang sering kita temukan &lt;i&gt;unused &lt;/i&gt;partisi dengan &lt;i&gt;size&lt;/i&gt; yang cukup besar dan terabaikan, umumnya merupakan hasil dari penggunaan Live USB installer.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Pada artikel ini, saya akan memberikan cara menghapus partisi di Linux menggunakan terminal. Kenapa terminal? Karena mayoritas Distro Linux sudah memiliki tool &lt;i&gt;fdisk&lt;/i&gt; secara &lt;i&gt;default&lt;/i&gt; dan kita akan menggunakan tool tersebut.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hal pertama yang perlu kita tahu tentunya partisi mana yang ingin kita hapus, untuk mengecek itu melalui terminal, cukup jalankan perintah berikut:&lt;/p&gt;

&lt;div class="code"&gt;
$ sudo fdisk -l
&lt;/div&gt;
&lt;p&gt;Perintah di atas akan menampilkan semua &lt;i&gt;drive&lt;/i&gt; dan partisi pada komputer. Sebagai contoh merujuk pada gambar dibawah:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuVCfGd1t7NZaTz0t-T1YhsPuchYpWVpXEQGOSMkTFKVpQ8jgughPnJYuc_na87Oor8SgvslW68dVe_ZHNMSi4u-2XXAk8YtbXVsy0oY31zl-45IJ5h7JKlGxu1M1QR7wB1nBZKzEKlVjg/" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="" data-original-height="217" data-original-width="796" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuVCfGd1t7NZaTz0t-T1YhsPuchYpWVpXEQGOSMkTFKVpQ8jgughPnJYuc_na87Oor8SgvslW68dVe_ZHNMSi4u-2XXAk8YtbXVsy0oY31zl-45IJ5h7JKlGxu1M1QR7wB1nBZKzEKlVjg/w640-h174/removing-partitions-linux-001.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Device &lt;/i&gt;yang ada didalam sistem adalah &lt;i&gt;/sdb &lt;/i&gt;dan memiliki 2 partisi, &lt;i&gt;sdb1 &lt;/i&gt;dan &lt;i&gt;sdb2&lt;/i&gt;. Perlu diketahui kemungkinan bahwa hasil contoh di atas akan berbeda dengan hasil dari komputer/laptop kalian, bisa saja &lt;i&gt;/sda &lt;/i&gt;ataupun &lt;i&gt;/sdc&lt;/i&gt;. Selanjutnya kita akan mulai menggunakan &lt;i&gt;command mode &lt;/i&gt;dari tool &lt;i&gt;fdisk&lt;/i&gt;, jalankan perintah berikut:&lt;/p&gt;

&lt;div class="code"&gt;
$ sudo fdisk /dev/sdb
&lt;/div&gt;
&lt;p&gt;Lalu ketik &lt;i&gt;p &lt;/i&gt;dan tekan &lt;i&gt;Enter&lt;/i&gt; untuk melihat informasi partisi dan mengkonfimasi &lt;i&gt;device &lt;/i&gt;terpilih yaitu &lt;i&gt;/sdb&lt;/i&gt;. Jika kalian salah memilih device, cukup tekan &lt;i&gt;q &lt;/i&gt;untuk keluar dan jalankan kembali perintah di atas.&lt;/p&gt;&lt;p&gt;Untuk menghapus partisi, ketik &lt;i&gt;d &lt;/i&gt;dan otomatis akan muncul pilihan nomor partisi.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivGpKTKzMFnJTQWJXPbaIc_x4pjw2ITn70nycLmTJL1ECVP44gvfrWlW8p8gboHyiU2B6VvyLQ9fQG04mI5Gv-P_mayMhW5653spRDtgAOLFHeF6HpoF1r-qVtStaQvnEFMFoDyyXD1ycC/s800/removing-partitions-linux-002.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="362" data-original-width="800" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivGpKTKzMFnJTQWJXPbaIc_x4pjw2ITn70nycLmTJL1ECVP44gvfrWlW8p8gboHyiU2B6VvyLQ9fQG04mI5Gv-P_mayMhW5653spRDtgAOLFHeF6HpoF1r-qVtStaQvnEFMFoDyyXD1ycC/w640-h290/removing-partitions-linux-002.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Misalkan kita ingin menghapus partisi nomor dua, maka kita cukup ketik angka &lt;i&gt;2&lt;/i&gt; dan tekan &lt;i&gt;Enter&lt;/i&gt;. Jika berhasil maka akan muncul pesan "Partision 2 has been deleted", namun partisi itu belum benar-benar terhapus. &lt;i&gt;Fdisk &lt;/i&gt;masih butuh satu tahapan lagi untuk mengkonfirmasi perubahan tersebut. Tekan &lt;i&gt;w &lt;/i&gt;dan &lt;i&gt;Enter &lt;/i&gt;untuk mengkonfirmasinya. Jika berhasil maka hasil yang didapat seperti pada contoh gambar dibawah ini:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpcQXdBf-VHBriql1miXzk9Hd7CReMnqkHMkirWX2_312kntzdhqehA78zk6eeNuGSomCpmTiAHonnr0gAFAKLq464jqZyFLG0UDJmCkoctFkggsff8CpIkyHJP1gOtjdjCBH5vsOcARnD/s800/removing-partitions-linux-003.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="122" data-original-width="800" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpcQXdBf-VHBriql1miXzk9Hd7CReMnqkHMkirWX2_312kntzdhqehA78zk6eeNuGSomCpmTiAHonnr0gAFAKLq464jqZyFLG0UDJmCkoctFkggsff8CpIkyHJP1gOtjdjCBH5vsOcARnD/w640-h98/removing-partitions-linux-003.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Langkah terakhir adalah mengecek kembali hasilnya melalui perintah berikut:&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;


&lt;div class="code"&gt;
$ sudo fdisk -l /dev/sdb
&lt;/div&gt;
&lt;p&gt;Hasil yang muncul tentunya tidak ada lagi partisi &lt;i&gt;/sdb2 &lt;/i&gt;yang menandakan proses hapus partisi berhasil.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sebenarnya cukup mudah menggunakan &lt;i&gt;tool &lt;/i&gt;terminal semacam &lt;i&gt;fdisk, &lt;/i&gt;hanya yang perlu diperhatikan adalah mengetahui partisi mana yang akan kita hapus. Jika kalian lebih nyaman menggunakan GUI seperti GParted itu juga cukup baik, hanya saja mengetahui perintah-perintah terminal seperti contoh tutorial ini akan sangat membantu jika nantinya kita dihadapi masalah terkait GUI yang kita gunakan.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Demikian tutorial kali ini, dan selamat mencoba.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sumber: &lt;a href="https://itsfoss.com/delete-partition-linux/" rel="nofollow"&gt;itsfoss&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Headline image: &lt;a href="http://phoenixnap.com" rel="nofollow"&gt;phoenixnap&lt;/a&gt; &lt;/p&gt;</description><link>http://billnode.blogspot.com/2021/04/cara-menghapus-partisi-di-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6CY2Xh9JFrz-liI-O4X2DwoKkcNbnBdNe9LDPKP5zc5k4BMCj9144RvO9eQHBd6jJI2sACUv_sp6FaxqmP6RtcCbNw7YmIMi2fQ6qQGlTNPgBgHV8RhIiYIAMXtKIvRayIr_SE3G-Ivm2/s72-w640-h320-c/how-to-delete-partition-in-linux.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-3028544644827728083</guid><pubDate>Mon, 26 Apr 2021 04:06:00 +0000</pubDate><atom:updated>2022-08-14T15:28:50.772+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">chatting</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">signal</category><category domain="http://www.blogger.com/atom/ns#">tech</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><category domain="http://www.blogger.com/atom/ns#">whatsapp</category><title>Cara Install Aplikasi Signal Di Ubuntu dan ArchLinux</title><description>&lt;p&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3XPYt3jCnzv_Mw12PGP1xNEDvMy951SrXfm86-p8k-TQLCxuvf-NOIG9tQanOc9ZEpjLwDUzjOcHoDPqIfKLE4zbos-_IW_esGoXrhB5o1s1qgjSPz9yEA6BJ972DqpQiBpJ1e9T0j3l8/s708/download-mobile-bdc14a52a345c02611f4a8ac2a2796dfd4f5f2d9cf9abbf2494bd3e244d63035.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img loading="lazy" alt="headline" border="0" data-original-height="512" data-original-width="708" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3XPYt3jCnzv_Mw12PGP1xNEDvMy951SrXfm86-p8k-TQLCxuvf-NOIG9tQanOc9ZEpjLwDUzjOcHoDPqIfKLE4zbos-_IW_esGoXrhB5o1s1qgjSPz9yEA6BJ972DqpQiBpJ1e9T0j3l8/w400-h289/download-mobile-bdc14a52a345c02611f4a8ac2a2796dfd4f5f2d9cf9abbf2494bd3e244d63035.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Beberapa waktu lalu kita dihebohkan dengan aplikasi chatting baru yaitu Signal, terkait dengan pembaharuan privacy policy dari WhatsApp. Bagi sebagian orang pembaharuan ini merugikan pengguna karena dianggap tidak mengedepankan privasi pengguna sehingga banyak yang mulai beralih ke applikasi chatting lain seperti Signal.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Berdasarkan kondisi tersebut, Signal menjadi populer hanya dalam waktu singkat, terlebih lagi dukungannya pada beragam OS yang tidak hanya untuk aplikasi handphone.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Signal mendukung OS Linux, sehingga memudahkan penggunanya dalam berkomunikasi melalui komputer ataupun laptop. Adapun cara installnya cukup mudah, dan distro linux yang didukung juga beragam.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1. INSTALL SIGNAL DI UBUNTU&lt;/p&gt;
&lt;div class="code"&gt;
&lt;p&gt; $ sudo snap install signal-desktop&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;2. INSTALL SIGNAL VIA APT (UBUNTU)&lt;/p&gt;

&lt;div class="code"&gt;
&lt;p&gt;$ wget -O- https://updates.signal.org/desktop/apt/keys.asc | sudo apt-key add - &lt;/p&gt;
&lt;p&gt;$ echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list&lt;/p&gt;
  &lt;p&gt;$ sudo apt update &amp;amp;&amp;amp; sudo apt install signal-desktop&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;3. INSTALL SIGNAL DI ARCHLINUX/MANJARO&lt;/p&gt;&lt;p&gt;Untuk ArchLinux dan turunannya, package tersedia melalui &lt;span&gt;&lt;a href="https://aur.archlinux.org/packages/signald/" rel="nofollow" style="color: #3d85c6;"&gt;AUR&lt;/a&gt;&lt;/span&gt;. &lt;br /&gt;&lt;/p&gt;

&lt;div class="code"&gt;
  &lt;p&gt;$ yay -S signald&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Setelah proses installasi selesai, sama seperti installasi aplikasi linux pada umumnya, akan muncul icon baru pada dikategori internet ataupun chat.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Saya pribadi sudah menggunakan Signal baik di handphone maupun di Laptop saya yang menggunakan ArchLinux, sampai saat ini tidak ada kendala yang saya temukan. Selamat mencoba.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sumber: &lt;a href="https://itsfoss.com/install-signal-ubuntu/"&gt;itsfoss&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Headline image: &lt;a href="http://signal.org" rel="nofollow"&gt;signal&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://billnode.blogspot.com/2021/04/cara-install-aplikasi-signal-di-ubuntu.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3XPYt3jCnzv_Mw12PGP1xNEDvMy951SrXfm86-p8k-TQLCxuvf-NOIG9tQanOc9ZEpjLwDUzjOcHoDPqIfKLE4zbos-_IW_esGoXrhB5o1s1qgjSPz9yEA6BJ972DqpQiBpJ1e9T0j3l8/s72-w400-h289-c/download-mobile-bdc14a52a345c02611f4a8ac2a2796dfd4f5f2d9cf9abbf2494bd3e244d63035.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-1571514373329762164</guid><pubDate>Sun, 25 Apr 2021 05:27:00 +0000</pubDate><atom:updated>2022-08-14T15:29:00.380+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">aplikasi</category><category domain="http://www.blogger.com/atom/ns#">editing</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">news</category><category domain="http://www.blogger.com/atom/ns#">tech</category><category domain="http://www.blogger.com/atom/ns#">video</category><title>5 Aplikasi Video Editing Terbaik</title><description>&lt;p&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDJrtSjQIpa_4jtEdxGOctEu5VTFeQ6BmMSKQNLb5PW2jET3j-eWCEVqkhsmYae6-gia-1VILGIWhAaL5AdUBryJEo7YitErhEW4oCIVGrrnEOExch1CVRhQbpW4GjDjtcYlO5NgSsl__Q/s620/optinmonster.com.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="300" loading="lazy" alt="headline" data-original-width="620" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDJrtSjQIpa_4jtEdxGOctEu5VTFeQ6BmMSKQNLb5PW2jET3j-eWCEVqkhsmYae6-gia-1VILGIWhAaL5AdUBryJEo7YitErhEW4oCIVGrrnEOExch1CVRhQbpW4GjDjtcYlO5NgSsl__Q/w640-h310/optinmonster.com.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Saat ini sudah tersedia banyak jenis aplikasi video editing, tetapi beberapa diantaranya mengharuskan kita sebagai pengguna mengeluarkan uang untuk bisa menggunakannya, baik itu dalam bentuk membeli lisensi ataupun membayar service.&lt;p&gt;Pada artikel ini, saya akan memberikan 5 daftar software video editing yang bisa kalian gunakan secara gratis.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. KDENLIVE&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoKJ5lpWF-StZBbzuvCYMBP_XO4-uQgVqHObfGHBeMPG2qzc1H757bloPpG8gN3T7Ogchhk4Ut227AELHU5Sn4BEjsk4pSO-ZNGDEmWQe5nd06grVwMcb7F65Yq6sPeVoTxLmTEdRNUtnq/s800/itfoss.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="449" data-original-width="800" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoKJ5lpWF-StZBbzuvCYMBP_XO4-uQgVqHObfGHBeMPG2qzc1H757bloPpG8gN3T7Ogchhk4Ut227AELHU5Sn4BEjsk4pSO-ZNGDEmWQe5nd06grVwMcb7F65Yq6sPeVoTxLmTEdRNUtnq/w640-h358/itfoss.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Fitur:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Multi-track video editing&lt;/li&gt;&lt;li&gt;Mendukung berbagai jenis format audio/video&amp;nbsp;&lt;/li&gt;&lt;li&gt;Backup otomatis&lt;/li&gt;&lt;li&gt;Timeline preview&lt;/li&gt;&lt;li&gt;Efek, dll&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Dukungan OS: Linux, macOS dan Windows.&lt;/p&gt;&lt;p&gt;Download &lt;span style="color: #3d85c6;"&gt;&lt;a href="https://kdenlive.org/en/" rel="nofollow" style="color: #3d85c6;"&gt;KdenLive&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. OPENSHOT&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn6K8DNzuELSJY0IcE64R_Dy597_SRIfdowtl2Y_LDhhpc5Frt02H7weiAXItiRSeTeH9M0iBdBiC7Qj-YXPIHIVeLY_DVolTnwRAtJjzoO1L20r_3Hg6J5XIxs3Cn_ouANW8PJjMpRy0I/s800/itfoss.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="449" data-original-width="800" height="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn6K8DNzuELSJY0IcE64R_Dy597_SRIfdowtl2Y_LDhhpc5Frt02H7weiAXItiRSeTeH9M0iBdBiC7Qj-YXPIHIVeLY_DVolTnwRAtJjzoO1L20r_3Hg6J5XIxs3Cn_ouANW8PJjMpRy0I/w640-h359/itfoss.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&amp;nbsp;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Fitur:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Animasi 3D title dan efek&lt;/li&gt;&lt;li&gt;Advanced timeline drag/drop, panning, scrolling, zooming.&lt;/li&gt;&lt;li&gt;Real-time preview transisi video&lt;/li&gt;&lt;li&gt;Animasi Key frame framework&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Dukungan OS: Linux, macOS dan Windows.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Download &lt;span style="color: #3d85c6;"&gt;&lt;a href="https://www.openshot.org/" rel="nofollow" style="color: #3d85c6;"&gt;OpenShot&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. SHOTCUT&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIwPr4uxguI04KfbQvF1zF6rnyAXwFQyKEbQJEIZW-lEjyF7SAk_rrweew33rx3tZd6oaKo7zP0HfvIkKSDR8HG09H16OZyNoSzy-V81bIx5weZf0fR_8QW_CL63Qkvzs3gidmdoprCsPa/s1920/Screenshot_2021-04-25_12-10-52.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="1034" data-original-width="1920" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIwPr4uxguI04KfbQvF1zF6rnyAXwFQyKEbQJEIZW-lEjyF7SAk_rrweew33rx3tZd6oaKo7zP0HfvIkKSDR8HG09H16OZyNoSzy-V81bIx5weZf0fR_8QW_CL63Qkvzs3gidmdoprCsPa/w640-h345/Screenshot_2021-04-25_12-10-52.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Fitur:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;JACK transport sync&lt;/li&gt;&lt;li&gt;User Interface yang intuitif&lt;/li&gt;&lt;li&gt;Dukungan stereo, mono dan 5.1 surround &lt;/li&gt;&lt;li&gt;Tersedia versi portable&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Dukungan OS: Linux, macOS dan Windows.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Download &lt;span style="color: #3d85c6;"&gt;&lt;a href="https://shotcut.org/" rel="nofollow" style="color: #3d85c6;"&gt;Shotcut&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. PITIVI&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0MOIa5XWqS2WvQVQtD2FPAb3NYX-kvXFvk1HVPv7Hhs3iu5iNpIy5qQjBT4fzAz64H_F3qKYD28FA0JO9wbkq2Lvl1DO_12s_5jAZs87AgX_koGORNA-jqNV4jZNlbhPySrZyJMZXul3l/s800/itfoss.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="464" data-original-width="800" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0MOIa5XWqS2WvQVQtD2FPAb3NYX-kvXFvk1HVPv7Hhs3iu5iNpIy5qQjBT4fzAz64H_F3qKYD28FA0JO9wbkq2Lvl1DO_12s_5jAZs87AgX_koGORNA-jqNV4jZNlbhPySrZyJMZXul3l/w640-h371/itfoss.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;Fitur:&lt;p&gt;&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Audio waveforms&lt;/li&gt;&lt;li&gt;Real-time trimming&lt;/li&gt;&lt;li&gt;Animasi efek dan transisi&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Dukungan OS: Linux&lt;/p&gt;&lt;p&gt;Download &lt;span style="color: #3d85c6;"&gt;&lt;a href="http://www.pitivi.org/" rel="nofollow" style="color: #3d85c6;"&gt;Pitivi&lt;/a&gt;&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. BLENDER&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMuimsTiijh5rn7U30DzKBU8LbVLx0CSLaYtnySRNQv7KqK1N904DMrQmy8qIJ2cxDi2ch1L3pzjzOCzDMmkJ404vhM4tZbAqUVpdD-L5xh3TA6UrGfI7rMPVo18eo43YwZHJTyT3o4i-5/s800/itfoss.webp" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="445" data-original-width="800" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMuimsTiijh5rn7U30DzKBU8LbVLx0CSLaYtnySRNQv7KqK1N904DMrQmy8qIJ2cxDi2ch1L3pzjzOCzDMmkJ404vhM4tZbAqUVpdD-L5xh3TA6UrGfI7rMPVo18eo43YwZHJTyT3o4i-5/w640-h356/itfoss.webp" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;itsfoss.com&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;Fitur:&lt;/p&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;VFX&lt;/li&gt;&lt;li&gt;Modeling tools&lt;/li&gt;&lt;li&gt;Draw untuk 2D maupun 3D&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Dukungan OS: Linux, macOS dan Windows.&lt;/p&gt;&lt;p&gt;Download &lt;span style="color: #3d85c6;"&gt;&lt;a href="https://www.blender.org/" rel="nofollow" style="color: #3d85c6;"&gt;Blender&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Dari 5 jenis software video editing diatas, saya pribadi memakai &lt;b&gt;Shotcut&lt;/b&gt; hingga sekarang, karena menurut saya penggunaanya cukup simple dan cocok dengan kebutuhan saya dalam mengedit video. Tentunya masih banyak lagi software video editing lainnya yang mungkin jauh lebih baik dari segi fitur, namun 5 daftar tersebut saya rangkum berdasarkan pengalaman saya pribadi dalam penggunaanya.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Jika kalian punya rekomendasi lainnya, bisa share pengalamannya melalui kolom komentar dibawah. Selamat mencoba.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Sumber: &lt;a href="https://itsfoss.com/open-source-video-editors/"&gt;itsfoss&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Headline image: &lt;a href="http://optinmonster.com" rel="nofollow"&gt;optinmonster&lt;/a&gt;&amp;nbsp; &lt;/p&gt;</description><link>http://billnode.blogspot.com/2021/04/5-aplikasi-video-editing-terbaik.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDJrtSjQIpa_4jtEdxGOctEu5VTFeQ6BmMSKQNLb5PW2jET3j-eWCEVqkhsmYae6-gia-1VILGIWhAaL5AdUBryJEo7YitErhEW4oCIVGrrnEOExch1CVRhQbpW4GjDjtcYlO5NgSsl__Q/s72-w640-h310-c/optinmonster.com.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-4155256800347106902</guid><pubDate>Tue, 13 Nov 2018 03:20:00 +0000</pubDate><atom:updated>2022-08-14T15:29:18.773+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Belajar PostgreSQL: Mengelola Complex Data PostgreSQL Dengan JSON dan XML - Part 5</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkaQZN3LfRDcYwAMwaJTzOQtIkVtSro4DVbKg_VJDkA2bScpBpN1iv4mkjSBohzcO61nTYTm_TfahrRrwvydkhoyffKk2lo50Kr4F4SdeR-CitlV_JV1sKInBfoEN-O6D3jL_0S5zMa8nx/s1600/part5.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Mengelola Complex Data PostgreSQL Dengan JSON dan XML" loading="lazy" border="0" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkaQZN3LfRDcYwAMwaJTzOQtIkVtSro4DVbKg_VJDkA2bScpBpN1iv4mkjSBohzcO61nTYTm_TfahrRrwvydkhoyffKk2lo50Kr4F4SdeR-CitlV_JV1sKInBfoEN-O6D3jL_0S5zMa8nx/s320/part5.png" title="Mengelola Complex Data PostgreSQL Dengan JSON dan XML" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Di aplikasi nyata, tidak semua data yang disimpan dalam sebuah tabel dan database akan digunakan hasil ouput default-nya yang berupa RETURN TABLE. Terkadang beberapa developer memerlukan jenis data yang mungkin dianggap lebih sederhana dan terlebih jika jenis data tersebut mendukung cross platform. Saat ini sendiri jenis data yang cukup umum digunakan ialah JSON dan XML.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kedua jenis data tersebut adalah merupakan text-based data format. PostgreSQL sudah mendukung kedua jenis model data tersebut. Untuk XML sudah tersedia beberapa jenis fungsi *_to_xml yang menerima jenis inputan data baik berupa SQL query, tabel ataupun view yang ouput-nya akan direspresentasikan kedalam bentuk XML.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mari kita coba melihat contoh langsung, kita akan gunakan tabel yang sudah pernah dibuat dari tutorial sebelumnya. Cukup jalankan perintah dibawah ini maka akan tampak hasil seperti pada gambar.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT table_to_xml('tb_penggajian', true, false, '') AS s;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkaK9ptcARquQJfqPvI8ZJWX75Xz7b18GbcRhM6UFXpDS0CowbbHmlloYuW9RhdHTHR-xi_gW1XY-OpfkooFN5lkrz02fbbZ7PBwj7f3n7giybjqPTiz6EZFSzHU1rc-NotnSF5PKRMZwz/s1600/Screenshot_2018-11-12_13-49-49.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Mengelola Complex Data PostgreSQL Dengan JSON dan XML" border="0" data-original-height="479" data-original-width="646" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkaK9ptcARquQJfqPvI8ZJWX75Xz7b18GbcRhM6UFXpDS0CowbbHmlloYuW9RhdHTHR-xi_gW1XY-OpfkooFN5lkrz02fbbZ7PBwj7f3n7giybjqPTiz6EZFSzHU1rc-NotnSF5PKRMZwz/s320/Screenshot_2018-11-12_13-49-49.png" title="Mengelola Complex Data PostgreSQL Dengan JSON dan XML" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Hasil dari contoh diatas kita langsung mendapatkan output berupa XML, sangat menarik bukan?&lt;br /&gt;
&lt;br /&gt;
Hal menarik lainnya dari fungsi *_to_xml adalah kamu bisa membuat sebuah fungsi yang mengembalikan beberapa jenis ouput document XML dalam sekali panggil, dan juga bisa dengan struktur yang berbeda.&lt;br /&gt;
&lt;br /&gt;
Tersedia 5 macam varian dari fungsi *_to_xml yang diantaranya yaitu:&lt;br /&gt;
&lt;div class="code"&gt;
- cursor_to_xml(cursor refcursor, count integer,nulls bool, tableforest bool, targetns text)&lt;br /&gt;
- query_to_xml(query text,nulls bool, tableforest bool, targetns text)&lt;br /&gt;
- table_to_xml(tbl regclass,nulls boolean, tableforest boolean, targetns text)&lt;br /&gt;
- schema_to_xml(schema name,nulls boolean, tableforest boolean, targetns text)&lt;br /&gt;
- database_to_xml(nulls boolean, tableforest bool, targetns text)&lt;/div&gt;
Informasi lebih lanjut silahkan langsung menuju &lt;a href="http://www.postgresql.org/docs/current" rel="nofollow" target="_blank"&gt;&lt;span style="color: #3d85c6;"&gt;official site&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Untuk fungsi tersebut diatas akan merepresentasikan hasil berupa data string dari SQL query, tabel ataupun schmea. Penggunaan view dapat disisipkan kedalam fungsi table_to_xml.&lt;br /&gt;
&lt;br /&gt;
Khusus untuk fungsi cursor_to_xml sangat direkomendasikan untuk digunakan jika mempunyai data yang besar, karena fungsi ini akan mengkonversi data kedalam potongan-potongan record yang akan mengurangi beban dalam memory. Sebenarnya akan lebih baik mengenal seperti apa penggunaan dan cara kerja cursor dalam PostgreSQL, saya pribadi tidak begitu mahir dengan cursor karena hampir jarang sekali menggunakannya, mungkin nanti saya akan coba cari resource dan membuat artikelnya.&lt;br /&gt;
&lt;br /&gt;
Setelah tadi kita mengenal sedikit output data XML, sekarang kita lanjutkan dengan jenis JSON. Sama seperti jenis data XML, jenis data JSON juga memiliki fungsi untuk menangani konversi data yaitu array_to_json(anyarray, bool) yang menangani konversi array ke JSON dan row_to_json(record, bool) untuk konversi record ke JSON.&lt;br /&gt;
&lt;br /&gt;
Berikut ini contoh penggunaannya.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT array_to_json(array[1,2,3]);&lt;br /&gt;
array_to_json&lt;br /&gt;
---------------&lt;br /&gt;
[1,2,3]&lt;br /&gt;
(1 row)&lt;/div&gt;
&lt;div class="code"&gt;
SELECT row_to_json(t) FROM tb_penggajian t;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row_to_json&lt;br /&gt;
-------------------------------------------------&lt;br /&gt;
{"nama_pegawai":"ARNOLD","nominal_gaji":800000}&lt;br /&gt;
{"nama_pegawai":"JOHN","nominal_gaji":1900000}&lt;br /&gt;
{"nama_pegawai":"JACK","nominal_gaji":1300000}&lt;br /&gt;
{"nama_pegawai":"BOB","nominal_gaji":1000000}&lt;br /&gt;
(4 rows)&lt;/div&gt;
Dengan menggunakan fungsi-fungsi diatas kita dapat menghasilkan output data menjadi lebih kompleks dibandingkan dengan standard RETURN TABLE pada umumnya. Mari kita coba dengan membuat tabel baru untuk sedikit lebih memahaminya.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE TABLE coba(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;id SERIAL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;data TEXT,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;tgl TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO coba(data) VALUES(random()), (random());&lt;/div&gt;
Lalu kita buat tabel lain yang mana salah satu kolomnya memiliki tipe data dari tabel sebelumnya dan memasukkan baris datanya ke tabel baru.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE TABLE coba2(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;id SERIAL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;data2 coba,  &amp;nbsp;&amp;nbsp;&amp;nbsp;-- isi record data2 berasal dari tabel coba  &lt;br /&gt;
&amp;nbsp;&amp;nbsp;tgl TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br /&gt;
);&lt;br /&gt;
INSERT INTO coba2(data2) SELECT coba FROM coba;&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM coba2;&lt;br /&gt;
id&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tgl&lt;br /&gt;
-----+------------------------------------------------------+----------------------------&lt;br /&gt;
1 &amp;nbsp;&amp;nbsp;&amp;nbsp;| (1,0.414514921139926,"2018-11-10 07:23:48.034324") &amp;nbsp;&amp;nbsp;| 2018-11-10 07:25:18.677993&lt;br /&gt;
2 &amp;nbsp;&amp;nbsp;&amp;nbsp;| (2,0.75422284938395,"2018-11-10 07:23:48.034324") &amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-11-10 07:25:18.677993&lt;br /&gt;
(2 rows)&lt;/div&gt;
Sekarang kita bisa coba mengkonversi data dari tabel diatas menjadi JSON.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT row_to_json(t2, true) FROM coba2 t2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row_to_json&lt;br /&gt;
-------------------------------------------------------------------------------------&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;  "id":1,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "data2":{"id":1,"data":"0.414514921139926","tgl":"2018-11-10T07:23:48.034324"},&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "tgl":"2018-11-10T07:25:18.677993"&lt;br /&gt;
}&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "id":2,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "data2":{"id":2,"data":"0.75422284938395","tgl":"2018-11-10T07:23:48.034324"},&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; "tgl":"2018-11-10T07:25:18.677993"&lt;br /&gt;
}&lt;br /&gt;
(2 rows)&lt;/div&gt;
Kemudian kita akan buat lagi sebuah tabel baru yang datanya berasal dari tabel coba2. Kita akan membuatnya menjadi terlihat sedikit lebih kompleks.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE TABLE coba3(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;id SERIAL PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;data3 coba2[],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;tgl TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO coba3(data3) SELECT array(SELECT coba2 FROM coba2);&lt;br /&gt;
SELECT row_to_json(t3, true) FROM coba3 t3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row_to_json&lt;br /&gt;
-------------------------------------------------------------------------------------&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;"id":1,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;"data3":[&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {"id":1,"data2":{"id":1,"data":"0.414514921139926","tgl":"2018-11-10T07:23:48.034324"},"tgl":"2018-11-10T07:25:18.677993"},&amp;lt;&lt;br /&gt;
br /&amp;gt;
  &amp;nbsp;&amp;nbsp;&amp;nbsp; {"id":2,"data2":{"id":2,"data":"0.75422284938395","tgl":"2018-11-10T07:23:48.034324"},"tgl":"2018-11-10T07:25:18.677993"}
 ],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;"tgl":"2018-11-10T07:33:05.713272"&lt;br /&gt;
}&lt;br /&gt;
(1 row)

&lt;/div&gt;
Hasil yang didapatkan sesuai yang diinginkan. Dengan menggunakan fungsi-fungsi tersebut diatas kita bisa memperoleh hasil data yang kompleks sesuai dengan yang kita inginkan, kita hanya perlu memilih output data apa yang diinginkan.&lt;br /&gt;
&lt;br /&gt;
Silahkan isi kolom komentar jika ada yang ingin ditanyakan ataupun koreksi yang harus saya lakukan.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/11/mengelola-complex-data-postgresql-dengan-json-dan-xml.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkaQZN3LfRDcYwAMwaJTzOQtIkVtSro4DVbKg_VJDkA2bScpBpN1iv4mkjSBohzcO61nTYTm_TfahrRrwvydkhoyffKk2lo50Kr4F4SdeR-CitlV_JV1sKInBfoEN-O6D3jL_0S5zMa8nx/s72-c/part5.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-450883679123494861</guid><pubDate>Mon, 08 Oct 2018 13:32:00 +0000</pubDate><atom:updated>2022-08-14T15:29:56.755+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Belajar PostgreSQL: Audit Data Tabel - Part 4</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0BA-gL9UpIgWpqbAu6qsvwyFnwadBWtbsw_6DXIyACKTgI5ieNbjcRh5S7TvSWmUGwqk9IpvX594RmxJE0w93Yh60r9Bk7EanRAXNbcgJVSgWVlEuTSWOnWZOeOEZ2G0Om6PvDoqEW125/s1600/part4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Belajar PostgreSQL: Audit Data Tabel - Part 4" loading="lazy" border="0" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0BA-gL9UpIgWpqbAu6qsvwyFnwadBWtbsw_6DXIyACKTgI5ieNbjcRh5S7TvSWmUGwqk9IpvX594RmxJE0w93Yh60r9Bk7EanRAXNbcgJVSgWVlEuTSWOnWZOeOEZ2G0Om6PvDoqEW125/s320/part4.png" title="Belajar PostgreSQL: Audit Data Tabel - Part 4" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dalam sebuah aplikasi yg kompleks, audit adalah hal wajib dimiliki karena segala proses data harus di cek utk menghindari kesalahan ataupun utk tujuan tertentu. Misalkan kita ingin mengetahui siapa, apa dan kapan dilakukannya sesuatu terhadap data dalam sistem, salah satu cara utk melakukannya adalah dengan membuat log data pada tabel tertentu.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kita akan membahas mengenai proses audit dengan menggunakan PostgreSQL. Pada kasus ini setidaknya ada 2 cara yg dapat dilakukan utk proses audit data:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
- Audit data dengan trigger&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
- Memberikan akses tabel hanya melalui sebuah fungsi dan melakukan audit dari fungsi tersebut&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kita coba buat contoh terkait kedua cara diatas. Pertama kita buat sebuah tabel terlebih dahulu.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
CREATE TABLE tb_penggajian(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_pegawai text PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nominal_gaji integer NOT NULL&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE tb_log_gaji(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;diganti_oleh text DEFAULT CURRENT_USER,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;waktu_ganti timestamp DEFAULT CURRENT_TIMESTAMP,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;jenis_input text,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_pegawai text,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;gaji_lama integer,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;gaji_baru integer&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
REVOKE ALL ON tb_log_gaji FROM PUBLIC;&lt;br /&gt;
GRANT ALL ON tb_log_gaji TO managers;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pada 2 query terakhir diatas, dimisalkan kita membuat hak akses dimana user biasa tidak seharusnya dapat mengakses tabel log utk audit dan hanya bisa diakses oleh manager. Lalu kita akan buat fungsi utk proses mencatat ataupun membuat log utk transaksi yg dilakukan.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION log_perubahan_gaji () RETURNS TRIGGER AS&lt;br /&gt;
$$&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;IF TG_OP = 'INSERT' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji(jenis_input, nama_pegawai, gaji_baru)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES (TG_OP, NEW.nama_pegawai, NEW.nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ELSIF TG_OP = 'UPDATE' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji(jenis_input, nama_pegawai, gaji_lama, gaji_baru)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES (TG_OP, NEW.nama_pegawai, OLD.nominal_gaji, NEW.nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ELSIF TG_OP = 'DELETE' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji(jenis_input, nama_pegawai, gaji_lama)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES (TG_OP, NEW.nama_pegawai, OLD.nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;END IF;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;RETURN NEW;&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql SECURITY DEFINER;&lt;br /&gt;
&lt;br /&gt;
CREATE TRIGGER trigger_audit_perubahan_gaji&lt;br /&gt;
AFTER INSERT OR UPDATE OR DELETE ON tb_penggajian&lt;br /&gt;
FOR EACH ROW EXECUTE PROCEDURE log_perubahan_gaji();&lt;/div&gt;
Selanjutnya, kita buat contoh data tb_penggajian utk mencoba fungsi trigger yg telah kita buat.&lt;br /&gt;
&lt;div class="code"&gt;
INSERT INTO tb_penggajian values('John', 1500000);&lt;br /&gt;
UPDATE tb_penggajian set nominal_gaji = 1700000 where nama_pegawai = 'John';&lt;br /&gt;
INSERT INTO tb_penggajian values('Jenny', 1500000);&lt;br /&gt;
UPDATE tb_penggajian set nominal_gaji = nominal_gaji + 200000;&lt;br /&gt;
SELECT * FROM tb_penggajian;&lt;br /&gt;
nama_pegawai | nominal_gaji&lt;br /&gt;
----------+---------&lt;br /&gt;
John | 1900000&lt;br /&gt;
Jenny | 1700000&lt;br /&gt;
(2 rows)&lt;/div&gt;
Dari query diatas kita sudah melakukan proses insert dan update data, tentunya hal ini sudah di record kedalam tabel log yg sudah kita buat. Jika kita cek tabel log maka akan tampil log data.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM tb_log_gaji;&lt;br /&gt;
diganti_oleh | waktu_ganti&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | jenis_input | nama_pegawai | gaji_lama | gaji_baru&lt;br /&gt;
-------------+----------------------------+-------------+--------------+-----------+-----------&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.128319 | INSERT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.151736 | UPDATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000&amp;nbsp;&amp;nbsp; | 1700000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.154109 | INSERT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.156283 | UPDATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1700000&amp;nbsp;&amp;nbsp; | 1900000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.156283 | UPDATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000 &amp;nbsp;&amp;nbsp;| 1700000&lt;br /&gt;
(5 rows)&lt;/div&gt;
Kita sudah dapatkan hasil log yg sesuai. Sedikit tambahan sekiranya kita tidak ingin ada user lain yg dapat mengakses tabel tb_penggajian, kita dapat mengatur hak aksesnya dengan query berikut:&lt;br /&gt;
&lt;div class="code"&gt;
REVOKE ALL ON tb_penggajian FROM PUBLIC;&lt;/div&gt;
Dan juga kita dapat memberikan akses user hanya pada 2 macam fungsi, misalnya utk setiap user hanya dapat melihat data tabel tb_penggajian dan setiap user lainnya dapat merubah data tabel tb_penggajian, yaitu seorang manager.&lt;br /&gt;
&lt;br /&gt;
Fungsi yg telah kita buat tadi memiliki klausa SECURITY DEFINER yg berarti fungsi tersebut hanya akan dijalankan melalui user yg membuatnya.&lt;br /&gt;
&lt;br /&gt;
Kita lanjutkan dengan membuat fungsi mencari gaji.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION cari_gaji(text)&lt;br /&gt;
RETURNS INTEGER AS&lt;br /&gt;
$$&lt;br /&gt;
&amp;nbsp;&amp;nbsp;-- Jika anda melihat gaji orang lain, maka akan dicatat&lt;br /&gt;
&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji(jenis_input, nama_pegawai, gaji_baru)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;SELECT 'SELECT', nama_pegawai, nominal_gaji FROM tb_penggajian&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE upper(nama_pegawai) = upper($1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;AND upper(nama_pegawai) != upper(CURRENT_USER); -- Jangan catat utk gaji sendiri&lt;br /&gt;
&amp;nbsp;&amp;nbsp;-- tampilkan gaji yg diinginkan&lt;br /&gt;
&amp;nbsp;&amp;nbsp;SELECT nominal_gaji FROM tb_penggajian&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE upper(nama_pegawai) = upper($1);&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE SQL SECURITY DEFINER;&lt;/div&gt;
Fungsi diatas merupakan contoh sederhana yg mana kita dapat melihat gaji orang lain dan tentunya hal ini harus dilakukan atas tanggungjawab pekerjaan, ya kasus seperti ini hanya diperuntukkan kepada orang tertentu semisal seorang manager. Dan juga bila dilihat kembali fungsi diatas kita buat hanya menggunakan bahasa SQL dan bukan menggunakan PL/pgSQL, karena memang PostgreSQL mendukung banyak jenis bahasa pemrograman utk membuat sebuah fungsi.&lt;br /&gt;
&lt;br /&gt;
Kita lanjutkan dengan fungsi terakhir yaitu mengatur gaji (set nominal_gaji). Fungsi yg akan kita buat ini berfungsi utk memeriksa apakah pegawai ditemukan dalam data, jika tidak ada maka akan dibuat secara otomatis. Ketika mengatur gaji pegawai menjadi 0, makan pegawai tersebut akan dihapus datanya dari tabel tb_penggajian.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION atur_penggajian(input_nama_pegawai text, input_nominal_gaji int)&lt;br /&gt;
RETURNS TEXT AS&lt;br /&gt;
$$&lt;br /&gt;
DECLARE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;gaji_lama integer;&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;SELECT nominal_gaji INTO gaji_lama&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FROM tb_penggajian&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE upper(nama_pegawai) = upper(input_nama_pegawai);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;IF NOT FOUND THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_penggajian VALUES(input_nama_pegawai, input_nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji(jenis_input,nama_pegawai,gaji_baru)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES ('INSERT',input_nama_pegawai,input_nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'INSERTED USER ' || input_nama_pegawai;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ELSIF input_nominal_gaji &amp;gt; 0 THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE tb_penggajian SET nominal_gaji = input_nominal_gaji&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE upper(nama_pegawai) = upper(input_nama_pegawai);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji (jenis_input,nama_pegawai,gaji_lama,gaji_baru)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES ('UPDATE',input_nama_pegawai,gaji_lama,input_nominal_gaji);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'UPDATED USER ' || input_nama_pegawai;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ELSE -- set gaji 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DELETE FROM tb_penggajian&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE upper(nama_pegawai) = upper(input_nama_pegawai);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO tb_log_gaji (jenis_input,nama_pegawai,gaji_lama)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES ('DELETE',input_nama_pegawai,gaji_lama);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'DELETED USER ' || input_nama_pegawai;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;END IF;&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql SECURITY DEFINER;&lt;/div&gt;
Sekarang kita perlu utk menghapus trigger yg telah kita buat karena kita sudah tidak membutuhkannya lagi (jika tidak dihapus maka data log akan tersimpan 2x) dan kita akan menggunakan fungsi baru yg kita buat diatas.&lt;br /&gt;
&lt;div class="code"&gt;
DROP TRIGGER trigger_audit_perubahan_gaji ON tb_penggajian;&lt;br /&gt;
&lt;br /&gt;
SELECT atur_penggajian('Jack', 1300000);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;atur_penggajian&lt;br /&gt;
--------------------&lt;br /&gt;
INSERTED USER Jack&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT atur_penggajian('Bob', 1000000);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;atur_penggajian&lt;br /&gt;
-------------------&lt;br /&gt;
INSERTED USER Bob&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
SELECT * FROM tb_penggajian;&lt;br /&gt;
nama_pegawai | nominal_gaji&lt;br /&gt;
-------------+---------&lt;br /&gt;
John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1900000&lt;br /&gt;
Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1700000&lt;br /&gt;
Jack &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1300000&lt;br /&gt;
Bob &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1000000&lt;br /&gt;
(4 rows)&lt;br /&gt;
&lt;br /&gt;
SELECT atur_penggajian('Jenny', 0);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;atur_penggajian&lt;br /&gt;
--------------------&lt;br /&gt;
DELETED USER Jenny&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM tb_log_gaji;&lt;br /&gt;
diganti_oleh &amp;nbsp;| waktu_ganti&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| jenis_input | nama_pegawai | gaji_lama | gaji_baru&lt;br /&gt;
--------------+----------------------------+-------------+--------------+-----------+-----------&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.128319 | INSERT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| John&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.151736 | UPDATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000 &amp;nbsp;&amp;nbsp;| 1700000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.154109 | INSERT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.156283 | UPDATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1700000 &amp;nbsp;&amp;nbsp;| 1900000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 18:27:04.156283 | UPDATE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1500000 &amp;nbsp;&amp;nbsp;| 1700000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 19:56:15.075756 | INSERT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Jack&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1300000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 19:56:20.144901 | INSERT &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Bob &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1000000&lt;br /&gt;
postgres &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 2018-10-07 19:57:06.802919 | DELETE &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Jenny &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1700000 &amp;nbsp;&amp;nbsp;|&lt;br /&gt;
(8 rows)&lt;/div&gt;
Data yg kita dapatkan sangat rapi bukan, memang diawal proses terlihat sangat sulit (meskipun sebenarnya memang sulit sih :D ) tapi utk jangka panjang akan sangat bermanfaat. Sedikit tambahan pada data diatas nama pegawai yg kita miliki tidak memiliki konsistensi terhadap inputan, jadi kita bisa input data dengan huruf kapital maupun tidak. Maka dari itu konsistensi data sangatlah diperlukan dan utk kasus begini akan lebih baik kita simpan dalam bentuk huruf kapital semua. Caranya cukup mudah hanya dengan menambahkan constraint CHECK seperti yg sudah pernah kita pakai di part sebelumnya.&lt;br /&gt;
&lt;div class="code"&gt;
CHECK (nama_pegawai = upper(nama_pegawai))&lt;/div&gt;
Tetapi kita akan menggunakan trigger utk mengatasi hal ini. Mari kita langsung buat trigger nya.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION uppercase_name() RETURNS TRIGGER AS&lt;br /&gt;
$$&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;NEW.nama_pegawai = upper(NEW.nama_pegawai);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;RETURN NEW;&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql;&lt;br /&gt;
&lt;br /&gt;
CREATE TRIGGER uppercase_nama_pegawai&lt;br /&gt;
BEFORE INSERT OR UPDATE OR DELETE ON tb_penggajian&lt;br /&gt;
FOR EACH ROW&lt;br /&gt;
EXECUTE PROCEDURE uppercase_name();&lt;/div&gt;
Saat fungsi atur_penggajian() digunakan kembali nantinya maka semua nama pegawai yg diinput akan disimpan dalam huruf kapital.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT atur_penggajian('arnold', 800000);&lt;br /&gt;
SELECT * FROM tb_penggajian;&lt;br /&gt;
nama_pegawai | nominal_gaji&lt;br /&gt;
-------------+---------&lt;br /&gt;
John&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1900000&lt;br /&gt;
Jack&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1300000&lt;br /&gt;
Bob&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 1000000&lt;br /&gt;
ARNOLD &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| 800000&lt;br /&gt;
(4 rows)&lt;/div&gt;
Lalu utk mengatasi nama pegawai yg sebelumnya kita cukup meng-update datanya dan menambahkan constraint CHECK.&lt;br /&gt;
&lt;div class="code"&gt;
UPDATE tb_penggajian SET nama_pegawai = upper(nama_pegawai)&lt;br /&gt;
WHERE NOT&lt;br /&gt;
nama_pegawai = upper(nama_pegawai);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE tb_penggajian ADD CONSTRAINT nama_pegawai_must_be_uppercase&lt;br /&gt;
CHECK (nama_pegawai = upper(nama_pegawai));&lt;/div&gt;
Itulah beberapa contoh kasus dalam penerapan sistem audit dengan PostgreSQL. Semua contoh diatas hanyalah utk kasus sederhana, tetapi setidaknya bisa dimengerti utk penerapan pada kasus aplikasi yg nyata. Jangan lupa selalu isi kolom komentar jika ingin bertanya dan koreksi yg harus saya dilakukan.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/10/audit-data-tabel-postgresql.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0BA-gL9UpIgWpqbAu6qsvwyFnwadBWtbsw_6DXIyACKTgI5ieNbjcRh5S7TvSWmUGwqk9IpvX594RmxJE0w93Yh60r9Bk7EanRAXNbcgJVSgWVlEuTSWOnWZOeOEZ2G0Om6PvDoqEW125/s72-c/part4.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-7375855800926777954</guid><pubDate>Sun, 07 Oct 2018 00:33:00 +0000</pubDate><atom:updated>2022-08-14T15:30:05.059+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Belajar PostgreSQL: Penanganan Data Dengan Trigger - Part 3</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOrSRkKO5qZEk5MPBkT6DAU9zmE_mDiuCZ8d1veDnw7uqRVew3ARVCk9F71NDX0-KsndJOK2_dZyupWjE7I7QuenxVlG1BFriY5wj7irrc-xJekjCMsLTuMwKilQYk-Or-zWQAuoXupNUW/s1600/part3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Belajar PostgreSQL: Penanganan Data Dengan Trigger - Part 3" loading="lazy" border="0" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOrSRkKO5qZEk5MPBkT6DAU9zmE_mDiuCZ8d1veDnw7uqRVew3ARVCk9F71NDX0-KsndJOK2_dZyupWjE7I7QuenxVlG1BFriY5wj7irrc-xJekjCMsLTuMwKilQYk-Or-zWQAuoXupNUW/s320/part3.png" title="Belajar PostgreSQL: Penanganan Data Dengan Trigger - Part 3" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mungkin disini bagian yg sudah bisa saya anggap familiar ketika berhubungan dengan trigger. Ya, sebuah fungsi yang secara otomatis akan dieksekusi dengan ketentuan yang sudah disesuaikan, inilah yg dikenal dengan istilah Trigger dalam sebuah database server.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mari kita langsung ke praktek, kita buat sebuah tabel baru sbb:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
CREATE TABLE tb_stok_buah (&lt;br /&gt;
&amp;nbsp;&amp;nbsp; nama_buah text PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; stok_buah integer NOT NULL,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; jml_pemesanan integer NOT NULL DEFAULT 0,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CHECK (stok_buah between 0 and 1000 ),&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CHECK (jml_pemesanan &amp;lt;= stok_buah)&lt;br /&gt;
);&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kegunaan CHECK disini adalah utk memeriksa berdasarkan ketentuan yg diinginkan, jadi pada contoh tabel diatas kita tidak bisa memiliki stok buah lebih dari 1000 dan tidak bisa memiliki nilai negatif serta jumlah pemesanan tidak bisa lebih dari stok. Kita lanjutkan dengan tabel kedua.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE TABLE tb_penawaran_buah (&lt;br /&gt;
&amp;nbsp;&amp;nbsp; id_penawaran serial PRIMARY KEY,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; nama_penerima text,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; tgl_penawaran timestamp default current_timestamp,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; nama_buah text REFERENCES tb_stok_buah,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; jml_penawaran integer&lt;br /&gt;
);&lt;/div&gt;
Kemudian kita buatkan sebuah fungsi trigger utk proses pemesanan. Utk membuatnya kita terlebih dahulu mebuat sebuah fungsi yg mirip seperti contoh pada artikel sebelumnya hanya saja nilai return adalah berupa trigger.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION pemesanan_buah () RETURNS trigger AS&lt;br /&gt;
$$&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp; IF TG_OP = 'INSERT' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE tb_stok_buah SET jml_pemesanan = jml_pemesanan + NEW.jml_penawaran&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
nama_buah = NEW.nama_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ELSIF TG_OP = 'UPDATE' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE tb_stok_buah SET jml_pemesanan = jml_pemesanan - OLD.jml_penawaran + NEW.jml_penawaran&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nama_buah = NEW.nama_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ELSIF TG_OP = 'DELETE' THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE tb_stok_buah SET jml_pemesanan = jml_pemesanan - OLD.jml_penawaran&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nama_buah = OLD.nama_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; END IF;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; RETURN NEW;&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql;&lt;/div&gt;
Lalu kita perlu utk membuat trigger menjalankan fungsi diatas. Sebelum itu agar tidak bingung, beberapa bagian dari fungsi diatas yaitu TG_OP singkatan dari Trigger Operation dan NEW/OLD merupakan tempat data dari kolom terkait, NEW utk data baru dan OLD utk data lama atau sebelumnya.&lt;br /&gt;
&lt;br /&gt;
Kita buat trigger utk setiap data record tabel pemesanan berubah, berikut ini contohnya:&lt;br /&gt;
&lt;div class="code"&gt;
CREATE TRIGGER manage_pemesanan_buah&lt;br /&gt;
AFTER INSERT OR UPDATE OR DELETE&lt;br /&gt;
ON tb_penawaran_buah&lt;br /&gt;
FOR EACH ROW&lt;br /&gt;
EXECUTE PROCEDURE pemesanan_buah();&lt;/div&gt;
Sampai disini kita telah selesai, mari kita lakukan ujicoba. Pertama kita tambahkan dulu beberapa buah ke dalam tabel stok:&lt;br /&gt;
&lt;div class="code"&gt;
INSERT INTO tb_stok_buah(nama_buah,stok_buah) VALUES ('NANGKA',500);&lt;br /&gt;
INSERT INTO tb_stok_buah(nama_buah,stok_buah) VALUES ('DURIAN',500);&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM tb_stok_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_buah&amp;nbsp;&amp;nbsp;|&amp;nbsp;stok_buah&amp;nbsp;|&amp;nbsp;jml_pemesanan&lt;br /&gt;
-------------+-----------+-----------------&lt;br /&gt;
&amp;nbsp;NANGKA&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp;500&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;
&amp;nbsp;DURIAN&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp; &amp;nbsp;500&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;
(2 rows)&lt;/div&gt;
Contoh data sudah kita buat, selanjutnya kita buat contoh pemesanan sejumlah 100 buah NANGKA utk John:&lt;br /&gt;
&lt;div class="code"&gt;
INSERT INTO tb_penawaran_buah(nama_penerima, nama_buah, jml_penawaran) VALUES ('John','NANGKA',100); SELECT * FROM tb_penawaran_buah;&lt;br /&gt;
&amp;nbsp;id_penawaran&amp;nbsp;|&amp;nbsp;nama_penerima&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tgl_penawaran&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;nama_buah&amp;nbsp;|&amp;nbsp;jml_penawaran&lt;br /&gt;
--------------+---------------+-------------------------------+------------+----------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp;|&amp;nbsp;John&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;2018-10-02 19:58:21.423115&amp;nbsp; &amp;nbsp;|&amp;nbsp;NANGKA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100&lt;br /&gt;
(1 row)&lt;/div&gt;
Kita sudah buat pemesanan pertama, jika kita lakukan pengecekan kembali di tabel stok maka akan tampak perubahan di kolom jml_pemesanan:&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM tb_stok_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_buah&amp;nbsp;&amp;nbsp;|&amp;nbsp;stok_buah&amp;nbsp;|&amp;nbsp;jml_pemesanan&lt;br /&gt;
-------------+-----------+----------------&lt;br /&gt;
&amp;nbsp;DURIAN&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;
&amp;nbsp;NANGKA&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100&lt;/div&gt;
Jika kita melakukan koreksi terhadap jumlah pesanan John misalnya dari 100 buah menjadi 115 buah NANGKA maka jumlah pesanan di tabel stok juga tetap akan berubah:&lt;br /&gt;
&lt;div class="code"&gt;
UPDATE tb_penawaran_buah SET jml_penawaran = 115 WHERE id_penawaran = 1;&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM tb_stok_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_buah&amp;nbsp;&amp;nbsp;|&amp;nbsp;stok_buah&amp;nbsp;|&amp;nbsp;jml_pemesanan&lt;br /&gt;
-------------+-----------+--------------&lt;br /&gt;
&amp;nbsp;DURIAN&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;
&amp;nbsp;NANGKA&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;115&lt;/div&gt;
Pada contoh tabel stok, kita menggunakan sebuah constraint yaitu CHECK. Ada beragam jenis constraint, bisa di lihat &lt;a href="https://www.postgresql.org/docs/9.4/static/ddl-constraints.html" target="_blank"&gt;&lt;span style="color: #3d85c6;"&gt;disini&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Kembali kita lanjutkan utk contoh query berikutnya, kita coba buat query dimana kita ingin menjual NANGKA yg telah dipesan.&lt;br /&gt;
&lt;div class="code"&gt;
UPDATE tb_stok_buah SET stok_buah = 100 WHERE nama_buah = 'NANGKA';&lt;br /&gt;
ERROR:  new row for relation "tb_stok_buah" violates check constraint "tb_stok_buah_check"&lt;br /&gt;
DETAIL:  Failing row contains (NANGKA, 100, 115).
&lt;/div&gt;
Kemudian kita coba utk memesan lebih dari stok yg tersedia.&lt;br /&gt;
&lt;div class="code"&gt;
UPDATE tb_penawaran_buah SET jml_penawaran = 1100 WHERE id_penawaran = 1;&lt;br /&gt;
ERROR:  new row for relation "tb_stok_buah" violates check constraint "tb_stok_buah_check"&lt;br /&gt;
DETAIL:  Failing row contains (NANGKA, 500, 1100).&lt;br /&gt;
CONTEXT:  SQL statement "UPDATE tb_stok_buah SET jml_pemesanan = jml_pemesanan - OLD.jml_penawaran + NEW.jml_penawaran&lt;br /&gt;
WHERE&lt;br /&gt;
nama_buah = NEW.nama_buah"&lt;br /&gt;
PL/pgSQL function pemesanan_buah() line 8 at SQL statement
&lt;/div&gt;
Lalu utk kasus ini, jika kita ingin mengirimkan pesanan maka kita hanya perlu menghapusnya.&lt;br /&gt;
&lt;div class="code"&gt;
DELETE FROM tb_penawaran_buah WHERE id_penawaran = 1;&lt;br /&gt;
SELECT * FROM tb_stok_buah;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;nama_buah&amp;nbsp;&amp;nbsp;|&amp;nbsp;stok_buah&amp;nbsp;|&amp;nbsp;jml_pemesanan&lt;br /&gt;
-------------+-----------+--------------&lt;br /&gt;
&amp;nbsp;DURIAN&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;
&amp;nbsp;NANGKA&amp;nbsp; &amp;nbsp; &amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;500&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;br /&gt;
(2 rows)
&lt;/div&gt;
Akan tetapi, penggunaan DELETE disini hanyalah untuk contoh saja, jika kasusnya ada pada aplikasi nyata, maka langkah terbaik ialah menyimpan data pesanan menjadi arsip terlebih dahulu (misal disediakan tabel arsip) sebelum data pesanan dihapus agar aplikasi punya record pesanan yg telah dilakukan.&lt;br /&gt;
&lt;br /&gt;
Saya kira hanya itu contoh Trigger yg bisa saya berikan, dengan contoh kasus yg sederhana dan mungkin akan lebih baik jika diterapkan pada aplikasi nyata. Silahkan isi kolom komentar jika ada yg ingin ditanyakan ataupun koreksi yg perlu dilakukan.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/10/penanganan-data-dengan-trigger.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOrSRkKO5qZEk5MPBkT6DAU9zmE_mDiuCZ8d1veDnw7uqRVew3ARVCk9F71NDX0-KsndJOK2_dZyupWjE7I7QuenxVlG1BFriY5wj7irrc-xJekjCMsLTuMwKilQYk-Or-zWQAuoXupNUW/s72-c/part3.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-8818544143131110586</guid><pubDate>Sat, 06 Oct 2018 01:55:00 +0000</pubDate><atom:updated>2022-08-14T15:30:11.121+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Belajar PostgreSQL: Membandingkan Data Dengan Menggunakan Operator - Part 2</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuvhQUmIBGo0kZgbAjB74Nhd1mIRiNGMsO3xq3_4BUcRQISIT4xgdQriVwOdSBIeLbIKCVlyUom7AnFYhiJ-zlc0UaqySlwZFy7jwvpJC7QDyFZKr5cnpwyxWBowbKyvIQ0ZXVut35xX_Q/s1600/part2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Belajar PostgreSQL: Membandingkan Data Dengan Menggunakan Operator - Part 2" loading="lazy" border="0" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuvhQUmIBGo0kZgbAjB74Nhd1mIRiNGMsO3xq3_4BUcRQISIT4xgdQriVwOdSBIeLbIKCVlyUom7AnFYhiJ-zlc0UaqySlwZFy7jwvpJC7QDyFZKr5cnpwyxWBowbKyvIQ0ZXVut35xX_Q/s320/part2.png" title="Belajar PostgreSQL: Membandingkan Data Dengan Menggunakan Operator - Part 2" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Server programming bukan hanya berarti membuat fungsi didalam server database, sebenarnya ada banyak hal yang bisa dilakukan. Utk kasus yg kompleks, kita dapat membuat sebuah TYPE maupun OPERATOR sesuai yg kita butuhkan utk membandingkan sebuah jenis, misalnya kita ingin membandingkan antara buah nangka dan durian. Pertama kita definisikan TYPE yg akan dibuat, lalu berikan perintah utk membandingkan buah yang kita inginkan, katakanlah 1 buah nangka sebanding dengan 1.5 buah durian.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kita buat TYPE terlebih dahulu, misalnya seperti dibawah ini:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
CREATE TYPE KUANTITAS as (nama_buah text, kuantitas int);&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kemudian contoh penggunaannya yg sederhana sebagai berikut:&lt;br /&gt;
&lt;div class="code"&gt;
SELECT '("DURIAN", 3)'::KUANTITAS;&lt;br /&gt;
kuantitas_buah&lt;br /&gt;
------------&lt;br /&gt;
(DURIAN,3)&lt;br /&gt;
(1 row)&lt;/div&gt;
Kita lanjutkan dengan membuat sebuah fungsi utk proses perbandingan kuantitas antara 2 buah tersebut diatas:&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION banding_kuantitas(&lt;br /&gt;
&amp;nbsp;&amp;nbsp; jenis_buah_a KUANTITAS,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; jenis_buah_b KUANTITAS&lt;br /&gt;
) RETURNS BOOL AS&lt;br /&gt;
$$&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp; IF (jenis_buah_a.nama_buah = 'DURIAN' AND jenis_buah_b.nama_buah = 'NANGKA')&lt;br /&gt;
&amp;nbsp;&amp;nbsp; THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  RETURN jenis_buah_a.kuantitas &amp;gt; (1.5 * jenis_buah_b.kuantitas);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; END IF;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; IF (jenis_buah_a.nama_buah = 'NANGKA' AND jenis_buah_b.nama_buah = 'DURIAN')&lt;br /&gt;
&amp;nbsp;&amp;nbsp; THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  RETURN (1.5 * jenis_buah_a.kuantitas) &amp;gt; jenis_buah_b.kuantitas;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; END IF;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; RETURN jenis_buah_a.kuantitas &amp;gt; jenis_buah_b.kuantitas;&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql;&lt;/div&gt;
Masih dengan contoh yg sederhana, dimana ada kondisi didalamnya yg harusnya bisa dengan mudah dipahami maksud dari isi kondisi tersebut. Mari kita coba tes fungsinya, perlu diketahui hasil dari fungsi bukanlah sebuah STRING melainkan BOOLEAN sehingga output yg didapatkan adalah berupa hasil BOOLEAN, f utk false dan t utk true.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT banding_kuantitas('("DURIAN", 3)'::KUANTITAS, '("NANGKA", 2)'::KUANTITAS);&lt;br /&gt;
banding_kuantitas&lt;br /&gt;
--------------&lt;br /&gt;
f&lt;br /&gt;
(1 row)&lt;/div&gt;
Kenapa kita dapat output false, lihat kondisi bagian pertama, karena memang kuantitas durian tidak lebih besar dari kondisi yg diharapkan. Kita coba lagi utk kondisi berikutnya.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT banding_kuantitas('("DURIAN", 4)'::KUANTITAS, '("NANGKA", 2)'::KUANTITAS);&lt;br /&gt;
banding_kuantitas&lt;br /&gt;
--------------&lt;br /&gt;
t&lt;br /&gt;
(1 row)&lt;/div&gt;
Nah disini kita mendapatkan hasil true, karena memang kali ini kuantitas durian mencukupi sehingga perbandingan yg kita lakukan memenuhi kondisi yg sudah kita tentukan didalam fungsi.&lt;br /&gt;
&lt;br /&gt;
Disini kita baru selesai pada bagian TYPE saja, mari kita lanjutkan dengan OPERATOR. Kita bisa membuat query diatas menjadi lebih bermakna ( katakanlah begitu :D ). Mari langsung kita buat sebuah OPERATOR utk menangani proses seperti query diatas.&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OPERATOR &amp;gt; (&lt;br /&gt;
&amp;nbsp;&amp;nbsp; leftarg = KUANTITAS,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; rightarg = KUANTITAS,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; procedure = banding_kuantitas,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; commutator = &amp;gt;&lt;br /&gt;
);&lt;/div&gt;
Mungkin dari contoh OPERATOR yg dibuat itu mungkin sedikit membingungkan, tapi sebenarnya itu sederhana. Kita hanya menentukan argument terkait ( utk detail bisa langsung ke official web PostgreSQL ya :D )&lt;br /&gt;
&lt;br /&gt;
Mari kita coba langsung dengan masih menggunakan query perbadingan sebelumnya.&lt;br /&gt;
&lt;div class="code"&gt;
SELECT '("NANGKA", 2)'::KUANTITAS &amp;gt; '("DURIAN", 2)'::KUANTITAS;&lt;br /&gt;
?column?&lt;br /&gt;
----------&lt;br /&gt;
t&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT '("NANGKA", 2)'::KUANTITAS &amp;gt; '("DURIAN", 3)'::KUANTITAS;&lt;br /&gt;
?column?&lt;br /&gt;
----------&lt;br /&gt;
f&lt;br /&gt;
(1 row)&lt;/div&gt;
Hasil perbandingan yg didapatkan adalah sama. Cukup mudah dimengerti ( saya harap begitu :D ), dengan membuat hal semacam ini tentunya akan dapat membantu kita mendapatkan data ke dalam aplikasi menjadi lebih to the point tanpa harus membuat query utk kondisi yg diharapkan.&lt;br /&gt;
&lt;br /&gt;
Jangan lupa silahkan isi kolom komentar jika ada yg ingin ditanyakan ataupun koreksi yg saya harus lakukan.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/10/membandingkan-data-dengan-menggunakan-operator.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuvhQUmIBGo0kZgbAjB74Nhd1mIRiNGMsO3xq3_4BUcRQISIT4xgdQriVwOdSBIeLbIKCVlyUom7AnFYhiJ-zlc0UaqySlwZFy7jwvpJC7QDyFZKr5cnpwyxWBowbKyvIQ0ZXVut35xX_Q/s72-c/part2.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-1101022335709441424</guid><pubDate>Thu, 04 Oct 2018 14:16:00 +0000</pubDate><atom:updated>2022-08-14T15:30:19.816+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Belajar PostgreSQL: Dasar Pemrograman Server pada PostgreSQL - Part 1</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMyfRfiC8E-BOvRxpQcotFzCaigRFndr3ONslNQfr6K37gFGIxPdif9z6uQhZv4JtwtbxA-pz4echoXxq3UB9kOua4q9r_NuX_k5LGPRmOTiwkw2DvulRydRnEKUi_4pKaM-nMUugElG5X/s1600/part1b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Belajar PostgreSQL: Dasar Pemrograman Server pada PostgreSQL - Part1" border="0" loading="lazy" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMyfRfiC8E-BOvRxpQcotFzCaigRFndr3ONslNQfr6K37gFGIxPdif9z6uQhZv4JtwtbxA-pz4echoXxq3UB9kOua4q9r_NuX_k5LGPRmOTiwkw2DvulRydRnEKUi_4pKaM-nMUugElG5X/s320/part1b.png" title="Belajar PostgreSQL: Dasar Pemrograman Server pada PostgreSQL - Part 1" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
PostgreSQL bukan hanya sekedar sebuah storage system yang mana cara untuk menggunakan hanyalah dengan mengeksekusi SQL statement. Sebenarnya itu hanyalah bagian kecil dari fiturnya.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Di seri kali ini kita akan membahas beberapa aspek pemrograman PostgreSQL server, bukan secara menyeluruh karena fitur yang tersedia sangat banyak dan saya hanya akan membuat beberapa penggunaan fitur yang umum ( bisa dikatakan begitu :D ). Saya akan membuat beberapa part utk seri ini, sama seperti seri &lt;a href="https://billnode.blogspot.com/search/label/mysql" target="_blank"&gt;&lt;span style="color: #3d85c6;"&gt;belajar MySQL&lt;/span&gt;&lt;/a&gt; sebelumnya. Tentunya disini saya tidak menjelaskan penggunaan SQL secara umum tetapi lebih kepada fitur-fitur ataupun penggunaan PostgreSQL itu sendiri.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Developer dapat membuat sebuah program dengan beragam pilihan bahasa pemrograman yang tersedia. Ketika membuat sebuah aplikasi, biasanya logic pengumpulan ataupun kelola database aplikasi langsung pada sisi aplikasi, tentunya cara ini sudah umum digunakan dalam desain sebuah aplikasi. Akan tetapi sebenarnya kita bisa melakukan pemrograman didalam database server.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mari kita lihat contoh sederhana. Berikut ini kita sediakan tabel beserta contoh datanya sebagai berikut:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
CREATE TABLE tb_tabungan(pemilik text, saldo numeric);&lt;br /&gt;
INSERT INTO tb_tabungan VALUES ('John', 500000);&lt;br /&gt;
INSERT INTO tb_tabungan VALUES ('Jenny', 2000);&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Umumnya, untuk berinteraksi dengan data tersebut diatas adalah dengan menggunakan SQL query. Misalkan kita ingin memindahkan dana senilai 20.000 dari akun John ke akun Jenny, dapat dilakukan dengan query berikut:&lt;br /&gt;
&lt;div class="code"&gt;
UPDATE tb_tabungan SET saldo = saldo - 20000 WHERE pemilik = 'John';&lt;br /&gt;
UPDATE tb_tabungan SET saldo = saldo + 20000 WHERE pemilik = 'Jenny';&lt;/div&gt;
Dari contoh diatas kita sudah bisa mendapatkan hasil yang diinginkan. Namun misalkan jika John tidak memiliki cukup saldo pada rekeningnya, maka seharusnya tidak ada transaksi yang akan terjadi. Utk mengatasi hal semacam ini kita dapat lakukan di sisi database server dengan membuat sebuah fungsi yg biasa dikenal dengan User-defined function (UDF). PostgreSQL sudah memiliki bahasa pemrograman sendiri yaitu PL/pgSQL. PL adalah singkatan dari Programming Language dan pgSQL adalah singkatan dari PostgreSQL, ya itulah PL/pgSQL.&lt;br /&gt;
&lt;br /&gt;
Kita coba buat sebuah fungsi sederhana dengan menggunakan PL/pgSQL, bisa copas jika tidak mau repot :D&lt;br /&gt;
&lt;div class="code"&gt;
CREATE OR REPLACE FUNCTION transfer(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;i_pembayar text,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;i_penerima text,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;i_saldo numeric(15,2)&lt;br /&gt;
) RETURNS text AS&lt;br /&gt;
$$&lt;br /&gt;
DECLARE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;saldo_pembayar numeric;&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;SELECT saldo INTO saldo_pembayar FROM tb_tabungan&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;pemilik = i_pembayar FOR UPDATE;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;IF NOT FOUND THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'Nama pembayar tidak ditemukan';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;END IF;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;IF saldo_pembayar &amp;lt; i_saldo THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'Dana dalam saldo tidak mencukupi';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;END IF;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;UPDATE tb_tabungan SET saldo = saldo + i_saldo&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;pemilik = i_penerima;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;IF NOT FOUND THEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RETURN 'Nama penerima tidak ditemukan';&lt;br /&gt;
&amp;nbsp;&amp;nbsp;END IF;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;UPDATE tb_tabungan SET saldo = saldo - i_saldo&lt;br /&gt;
&amp;nbsp;&amp;nbsp;WHERE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;pemilik = i_pembayar;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;RETURN 'Transfer berhasil';&lt;br /&gt;
END;&lt;br /&gt;
$$&lt;br /&gt;
LANGUAGE plpgsql;&lt;/div&gt;
Karena dasarnya bahasa inggris, tentunya akan mudah dipahami maksud dari fungsi diatas yang hanya berupa logic kondisi. Oh ya, perlu diperhatikan bahwa tanda ( ; ) disini masih sangat berpengaruh jadi jangan sampai lupa karena akan terjadi error.&lt;br /&gt;
&lt;br /&gt;
Kita cek terlebih dahulu data yang kita punya:&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM tb_tabungan;&lt;br /&gt;
pemilik | saldo&lt;br /&gt;
---------+---------&lt;br /&gt;
John | 500000.00&lt;br /&gt;
Jenny | 20000.00&lt;br /&gt;
(2 rows)&lt;/div&gt;
Dalam fungsi transfer yang kita buat, terdapat 3 argument yaitu berupa input nama pembayar, input nama penerima, dan nominal saldo, lalu cara menggunakannya adalah sebagai berikut:&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM transfer('John', 'Jenny', 20000.00);&lt;br /&gt;
transfer&lt;br /&gt;
----------&lt;br /&gt;
Transfer berhasil&lt;br /&gt;
(1 row)&lt;/div&gt;
Lalu cek kembali datanya, tentunya akan berubah saldo milik si Jenny.&lt;br /&gt;
&lt;br /&gt;
Kemudian kita coba utk jenis kondisi yang tersedia dengan memberikan nama penerima, nama pembayar yang tidak tersedia dan saldo yang tidak cukup, berikut ini contohnya:&lt;br /&gt;
&lt;br /&gt;
- Nama pembayar yg tidak tersedia&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM transfer('Momo', 'Jenny', 20000.00);&lt;br /&gt;
transfer&lt;br /&gt;
----------&lt;br /&gt;
Nama pembayar tidak ditemukan&lt;br /&gt;
(1 row)&lt;/div&gt;
- Nama penerima yg tidak tersedia&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM transfer('John', 'Jack', 20000.00);&lt;br /&gt;
transfer&lt;br /&gt;
----------&lt;br /&gt;
Nama penerima tidak ditemukan&lt;br /&gt;
(1 row)&lt;/div&gt;
- Saldo pembayar yg tidak cukup&lt;br /&gt;
&lt;div class="code"&gt;
SELECT * FROM transfer('John', 'Jenny', 1500000.00);&lt;br /&gt;
transfer&lt;br /&gt;
----------&lt;br /&gt;
Dana dalam saldo tidak mencukupi&lt;br /&gt;
(1 row)&lt;/div&gt;
Sangat bagus bukan? tentunya dengan adanya fungsi ini kita hanya perlu memanggilnya dalam aplikasi yang kita buat daripada membuat logic yang sama didalam aplikasi yang berupa SQL statement terlebih jika digunakan pada beberapa modul akan lebih baik menggunakan cara seperti contoh diatas, ya meskipun tidak salah ataupun bukan keharusan hanya saja cara seperti ini sebenarnya bisa dilakukan dan mungkin bisa saya bilang lebih baik dilakukan agar kode didalam aplikasi yang kita buat setidaknya tidak begitu banyak hanya karena SQL statement yg kita buat :D&lt;br /&gt;
&lt;br /&gt;
Itulah contoh sederhana dari seri pembuka pemrograman PostgreSQL, cukup banyak memang dan saya berharap dengan ini kita bisa lanjutkan ke part berikutnya. Jangan lupa silahkan berikan komentar jika ada yang ingin ditanyakan ataupun koreksi yang harus saya lakukan.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/10/dasar-pemrograman-server-postgresql.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMyfRfiC8E-BOvRxpQcotFzCaigRFndr3ONslNQfr6K37gFGIxPdif9z6uQhZv4JtwtbxA-pz4echoXxq3UB9kOua4q9r_NuX_k5LGPRmOTiwkw2DvulRydRnEKUi_4pKaM-nMUugElG5X/s72-c/part1b.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-9205744260579028478</guid><pubDate>Wed, 03 Oct 2018 06:14:00 +0000</pubDate><atom:updated>2022-08-14T15:30:29.187+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">database</category><category domain="http://www.blogger.com/atom/ns#">debian</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">postgresql</category><title>Cara Install PostgreSQL di Debian</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3oFfO82ewHL78rMRIoLBQ7JEg8JYJ5N6oWxdicbvy0kDcSfGPHgOdXqN-Cwcuc4zoQHQcfUi3kqEF3ZGT8jQH14aGqCElRH_cFzGXOuV5DV8In0N8Pnt7wvbPs12AiN6iZagj39UmG5-H/s1600/part1b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Install PostgreSQL di Debian" loading="lazy" border="0" data-original-height="423" data-original-width="749" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3oFfO82ewHL78rMRIoLBQ7JEg8JYJ5N6oWxdicbvy0kDcSfGPHgOdXqN-Cwcuc4zoQHQcfUi3kqEF3ZGT8jQH14aGqCElRH_cFzGXOuV5DV8In0N8Pnt7wvbPs12AiN6iZagj39UmG5-H/s320/part1b.png" title="Cara Install PostgreSQL di Debian" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
PostgreSQL merupakan salah satu RDMS (Relational Database Management System) populer dari banyak jenis RDMS yg tersedia. Saya sendiri telah menggunakannya sejak lama dan saya sangat suka dengan beragam fitur yg tersedia. Mulai dari sini saya akan membuat seri artikel baru utk artikel belajar PostgreSQL, namun sebelum itu kita perlu utk menginstall ke dalam OS dan juga saya akan menyertakan sedikit dasar cara menggunakannya, saya akan menggunakan Debian Linux versi 9 dan tentunya cara installasi mungkin akan sama utk jenis OS turunan debian.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Langkah pertama silakan update package terlebih dahulu dan kemudian install 2 package yg dibutuhkan:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ sudo apt-get update&lt;br /&gt;
$ sudo apt-get install postgresql postgresql-contrib&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Setelah proses installasi selesai, utk mengakses ke shell PostgreSQL bisa dilakukan dengan 2 cara, langkah pertama sbb:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -i -u postgres&lt;br /&gt;
$ psql&lt;br /&gt;
postgres=# \q &amp;lt;== \q utk keluar dari shell&lt;/div&gt;
Kemudian cara kedua adalah yg paling sering saya gunakan:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -u postgres psql&lt;br /&gt;
postgres=# \q &amp;lt;== \q utk keluar dari shell&lt;/div&gt;
Sampai disini kita tahu cara mengakses shell milik PostgreSQL. Perlu utk diketahui, PostgreSQL tidak membedakan antara nama pengguna maupun grup dan lebih ke istilah spesifik yaitu "role" yg berguna utk mengatur autentikasi dan autorisasi. Dan juga PostgreSQL tidak memiliki user/role root, default user/role nya adalah postgres.&lt;br /&gt;
&lt;br /&gt;
Jika kita ingin membuat akses shell baru utk PostgreSQL, kita perlu terlebih dahulu membuat sebuah role. Jika kita langsung mencoba mengakses shell misalnya:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -u john psql&lt;br /&gt;
psql: FATAL: role "john" does not exist&lt;/div&gt;
Maka akan muncul error seperti contoh diatas, oleh karena itu kita perlu membuat sebuah role. Tapi sebelum itu kita harus masuk ke dalam shell dulu, ulangi cara diatas utk masuk ke shell, lalu ikuti perintah dibawah ini:&lt;br /&gt;
&lt;div class="code"&gt;
postgres=# \du &amp;lt;== \du utk melihat daftar roles&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List of roles&lt;br /&gt;
&amp;nbsp;Role name&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Member of&lt;br /&gt;
-----------+------------------------------------------------------------+-----------&lt;br /&gt;
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
&lt;br /&gt;
postgres=# CREATE ROLE test_role1;&lt;br /&gt;
postgres=# \du&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List of roles&lt;br /&gt;
&amp;nbsp;Role name&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Member of&lt;br /&gt;
-------------+------------------------------------------------------------+-----------&lt;br /&gt;
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
test_role1 | Cannot login&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| {}&lt;/div&gt;
Role baru sudah berhasil dibuat tetapi tanpa ada hak akses utk login. Utk detail mengenai perintah CREATE ROLE bisa dilihat dengan perintah berikut:&lt;br /&gt;
&lt;div class="code"&gt;
postgres=# \h CREATE ROLE;&lt;/div&gt;
Akan tetapi ada cara yg lebih interaktif yaitu menggunakan shell user, berikut ini contohnya:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -u postgres createuser --interactive&lt;br /&gt;
Enter name of role to add: test_role2&lt;br /&gt;
Shall the new role be a superuser? (y/n) y&lt;/div&gt;
Kemudian jika kita lihat kembali role yg ada akan seperti contoh berikut:&lt;br /&gt;
&lt;div class="code"&gt;
postgres=# \du&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List of roles&lt;br /&gt;
&amp;nbsp;Role name&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| Member of&lt;br /&gt;
-------------+------------------------------------------------------------+-----------&lt;br /&gt;
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}&lt;br /&gt;
test_role1 | Cannot login&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| {}&lt;br /&gt;
test_role2 | Superuser, Create role, Create DB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;| {}&lt;/div&gt;
Sampai disini kita sudah berhasil membuat role, masih ada langkah berikutnya sebelum kita bisa menggunakan role yg baru. Jika kita mencoba langsung mengakses shell dengan role baru maka akan terjadi error meskipun role sudah kita buat.&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -i -u test_role2 psql&lt;br /&gt;
sudo: unknown user: test_role2&lt;br /&gt;
sudo: unable to initialize policy plugin&lt;/div&gt;
Hal ini dikarenakan autentikasi yg digunakan PostgreSQL adalah berdasarkan linux user, maka dari itu kita perlu membuat sebuah linux user baru dengan nama role yg sama:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo adduser test_role2 &amp;lt;== (ikuti perintah output nya)&lt;/div&gt;
Jika kita sudah selesai menambahkan user baru, kita juga masih belum bisa mengakses shell, jika kita coba maka akan tetap terjadi error:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -i -u test_role2 psql&lt;br /&gt;
psql: FATAL: database "test_role2" does not exist&lt;/div&gt;
Karena secara default role yg baru kita buat sebelumnya tidak memiliki database dan ketika masuk ke shell harusnya langsung masuk ke default database milik role, oleh karena itu kita perlu lakukan langkah terakhir yaitu membuat database default utk role:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo -u postgres createdb test_role2&lt;br /&gt;
$ sudo -i -u test_role2 psql&lt;/div&gt;
Dengan begini kita sudah bisa masuk ke dalam shell dengan role baru. Memang cukup sulit tapi jika sudah terbiasa maka akan mudah. Dan contoh diatas hanyalah sekedar dasar penggunaannya, masih banyak lagi cara ataupun opsi terkait proses pembuatan role yg bisa langsung dilihat pada web official PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
Sedikit tambahan utk penggunaan shell, berikut ini beberapa perintah dasar saat menggunakan shell:&lt;br /&gt;
&lt;h4&gt;
Masuk ke database tertentu&lt;/h4&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\c database_name;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4&gt;
Keluar dari shell&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\q&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Melihat semua database&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\l&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Melihat semua schema&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\dn&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Melihat semua store procedure dan fungsi&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\df&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Melihat semua tabel&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\dt&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Menampilkan isi sebuah store procedure ataupun fungsi&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\df+ function_name&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Menampilkan hasil query dalam pretty-format&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\x&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;
Menampilkan semua user&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
\du&lt;/div&gt;
&lt;br /&gt;
Itulah dasar penggunaan dan cara install PostgreSQL server dalam OS linux. Jika ada yg ingin ditanyakan silahkan isi kolom komentar dibawah dan berikan koreksi juga jika ada yg salah.&lt;/div&gt;
&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/10/cara-install-postgresql-di-debian.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3oFfO82ewHL78rMRIoLBQ7JEg8JYJ5N6oWxdicbvy0kDcSfGPHgOdXqN-Cwcuc4zoQHQcfUi3kqEF3ZGT8jQH14aGqCElRH_cFzGXOuV5DV8In0N8Pnt7wvbPs12AiN6iZagj39UmG5-H/s72-c/part1b.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-7420019469734219592</guid><pubDate>Tue, 07 Aug 2018 04:23:00 +0000</pubDate><atom:updated>2022-08-14T15:30:42.282+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">news</category><title>Google Resmi Merilis Android 9 Pie</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi-A_pCKyO0elI2SYkn4vqeAVlW2Uizh2tXbyYo4SEzFQwc8Z3euKbPqaWe2N9NgpXHhKXbiwRrp7az-2wXbUZ9xLIo9a7BkX3yWP62CiWM7_JZy7igjCZufEncif0yA1wAVPuyf364eA-/s1600/Screenshot_2018-08-07_10-56-54.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Google Resmi Merilis Android 9 Pie" loading="lazy" border="0" data-original-height="579" data-original-width="1040" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi-A_pCKyO0elI2SYkn4vqeAVlW2Uizh2tXbyYo4SEzFQwc8Z3euKbPqaWe2N9NgpXHhKXbiwRrp7az-2wXbUZ9xLIo9a7BkX3yWP62CiWM7_JZy7igjCZufEncif0yA1wAVPuyf364eA-/s320/Screenshot_2018-08-07_10-56-54.png" title="Google Resmi Merilis Android 9 Pie" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Rilis Android terbaru akhirnya resmi dirilis. Hadir dengan artificial intelligence&amp;nbsp;yang menjadikan handphone lebih interaktif, sederhana dan lebih mampu menyesuaikan kebutuhan pengguna. Inilah versi terbaru Android 9 Pie.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Android 9 Pie mempunyai beberapa fitur baru dan yang paling signifikan adalah perubahan dari sisi antarmuka (User interface) yang kini tampil lebih segar. Dan tentunya dengan adanya artifcial intelligence yang menjadi salah satu&amp;nbsp; peningkatan fitur pada sisi antarmuka.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Perlu diketahui, pada rilis resmi ini Google tidak menyediakan fitur Digital Wellbeing, usage dashboard, slices, app times dan wind down sebagaimana yang telah diumumkan pada saat acara Google I/O beberapa waktu lalu. Akan tetapi fitur tersebut akan diberikan kepada pengguna smartphone Google Pixel sebagai update beta. Namun ada kemungkinan kalau fitur lengkap akan tersedia dengan rilis terbaru dari smartphone Google Pixel 3.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Bagi pengguna smartphone lain, update Android 9 Pie ini akan diberikan secara bertahap dan tentunya hanya beberapa vendor dan jenis smartphone tertentu saja yang akan mendapatkannya (terkecuali jika menggunakan opsi developer yaitu melakukan flash).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Jika smartphone anda adalah salah satu yang mendapatkan update versi terbaru, maka anda sangat beruntung, namun jikapun bagi yang tidak mendapatkan update terbaru, mungkin bisa mengikuti cara opsi developer ataupun mengganti smartphone baru yang mendapatkan update Android 9 Pie.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Source: theverge.com&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Image source: blog.google&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/08/google-resmi-merilis-android-9-pie.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi-A_pCKyO0elI2SYkn4vqeAVlW2Uizh2tXbyYo4SEzFQwc8Z3euKbPqaWe2N9NgpXHhKXbiwRrp7az-2wXbUZ9xLIo9a7BkX3yWP62CiWM7_JZy7igjCZufEncif0yA1wAVPuyf364eA-/s72-c/Screenshot_2018-08-07_10-56-54.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-4327731854514822343</guid><pubDate>Wed, 04 Jul 2018 04:08:00 +0000</pubDate><atom:updated>2018-07-04T11:08:18.058+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">news</category><title>Android P Beta 3 Telah Rilis</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwNusmRi5BKi8aK8aauIy7eKpivQnmvRkU8CtTUEvZwzjrwjDk0puLuv-NZV1AZdO1MZ_xGOW33NyczMfgVm6w_z1LE3joTHGgT-vocEb9lavGg_pPx17M-XKTr084BgW3MGPux6yU6lJB/s1600/Android-P-again-796x398.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Android P Beta 3 Telah Rilis" border="0" data-original-height="398" data-original-width="796" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwNusmRi5BKi8aK8aauIy7eKpivQnmvRkU8CtTUEvZwzjrwjDk0puLuv-NZV1AZdO1MZ_xGOW33NyczMfgVm6w_z1LE3joTHGgT-vocEb9lavGg_pPx17M-XKTr084BgW3MGPux6yU6lJB/s320/Android-P-again-796x398.jpg" title="Android P Beta 3 Telah Rilis" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://billnode.blogspot.com/search/label/android" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;Android&lt;/span&gt;&lt;/a&gt; P beta 3 telah dirilis.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Namun pada rilis ini kita&amp;nbsp;tidak bisa berharap banyak dengan fitur yang disajikan, karena Google hanya melakukan perbaikan bug dan serta pengoptimalan sistem pada Android P.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Meskipun demikian, terkadang ada tweak kecil dalam setiap rilis beta termasuk juga dengan rilis beta 3 ini yang memungkinkan adanya tweak berupa fitur baru.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Jika anda terdaftar pada program Android Beta (umumnya para developer yang mengikuti program ini), rilis beta 3 ini akan muncul sebagai OTA (over the air). Akan tetapi tidak menutup kemungkinan bagi anda yang tidak terdaftar dalam program dan ingin mencicipinya, sudah pasti anda bisa melakukannya sendiri dengan cara flash, itupun jika memang anda sudah terbiasa melakukan flash.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dengan rilis beta 3 ini, kemungkinan sudah hampir mendekati produk final dari Android P. Untuk informasi lebih jelasnya bisa langsung mengunjungi melalui link reddit &lt;a href="https://www.reddit.com/r/androiddev/" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;ini&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Source: &lt;a href="https://thenextweb.com/google/2018/07/03/android-p-beta-3-is-rolling-out-now/" target="_blank"&gt;thenextweb&lt;/a&gt;&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/07/android-p-beta-3-telah-rilis.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwNusmRi5BKi8aK8aauIy7eKpivQnmvRkU8CtTUEvZwzjrwjDk0puLuv-NZV1AZdO1MZ_xGOW33NyczMfgVm6w_z1LE3joTHGgT-vocEb9lavGg_pPx17M-XKTr084BgW3MGPux6yU6lJB/s72-c/Android-P-again-796x398.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-6278723243246794653</guid><pubDate>Wed, 27 Jun 2018 05:55:00 +0000</pubDate><atom:updated>2022-08-14T15:30:50.127+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Mengatasi Error While Loading Shared Libraries libalpm.so.10 pada Arch Linux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw_nX1eexqn8hyphenhyphen0yYlFmiAP3zh2fJOHAknDx1_6DkNCumx287G-MsWCWQ7bZsSe3wIsGlnFIuYBFuyR9PNzm6-Cxh0n-frnjS1PokHmxn-uMZfD8HAtBrlSi8yd9XyIqs7Uym0rfmEf8-G/s1600/Screenshot_2018-06-27_11-44-45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Mengatasi Error While Loading Shared Libraries libalpm.so.10 pada Arch Linux" loading="lazy" border="0" data-original-height="454" data-original-width="644" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw_nX1eexqn8hyphenhyphen0yYlFmiAP3zh2fJOHAknDx1_6DkNCumx287G-MsWCWQ7bZsSe3wIsGlnFIuYBFuyR9PNzm6-Cxh0n-frnjS1PokHmxn-uMZfD8HAtBrlSi8yd9XyIqs7Uym0rfmEf8-G/s320/Screenshot_2018-06-27_11-44-45.png" title="Cara Mengatasi Error While Loading Shared Libraries libalpm.so.10 pada Arch Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Hari ini saya mencoba menggunakan yaourt untuk menginstall AUR helper yay, lalu muncul error seperti berikut.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
package-query: error while loading shared libraries: libalpm.so.10: cannot open shared object file: No such file or directory
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Setelah saya cari artikel terkait ternyata masalah ini berkaitan dengan libalpm yang sudah menggunakan libalpm.so.11.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ ls -lt /usr/lib/libalpm.so*&lt;br /&gt;
lrwxrwxrwx 1 root root     17 May 31 23:32 /usr/lib/libalpm.so -&amp;gt; libalpm.so.11.0.0&lt;br /&gt;
lrwxrwxrwx 1 root root     17 May 31 23:32 /usr/lib/libalpm.so.11 -&amp;gt; libalpm.so.11.0.0&lt;br /&gt;
-rwxr-xr-x 1 root root 223616 May 31 23:32 /usr/lib/libalpm.so.11.0.0
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dan package-query masih membutuhkan libalpm.so.10 sehingga terjadilah error diatas, untuk melihatnya lakukan perintah berikut:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ ldd /usr/bin/package-query &lt;br /&gt;
linux-vdso.so.1 (0x00007fffbdbe7000)&lt;br /&gt;
libcurl.so.4 =&amp;gt; /usr/lib/libcurl.so.4 (0x00007fb1fedf4000)&lt;br /&gt;
libyajl.so.2 =&amp;gt; /usr/lib/libyajl.so.2 (0x00007fb1febea000)&lt;br /&gt;
libalpm.so.10 =&amp;gt; not found&lt;br /&gt;
libc.so.6 =&amp;gt; /usr/lib/libc.so.6 (0x00007fb1fe82e000)&lt;br /&gt;
[...]
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dan untuk solusi menangani ini adalah dengan cara menghapus yaourt dan package-query, lalu install kembali hanya package-query karena disini saya bertujuan untuk menginstall AUR helper yay jadi sekalian saja abaikan yaourt setelah di hapus.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ sudo pacman -Rn yaourt package-query&lt;br /&gt;
$ git clone https://aur.archlinux.org/package-query.git&lt;br /&gt;
$ cd package-query&lt;br /&gt;
$ makepkg -si&lt;br /&gt;
$ cd &amp;amp;&amp;amp; git clone https://aur.archlinux.org/yay.git&lt;br /&gt;
$ cd yay &amp;amp;&amp;amp; makepkg -si&lt;br /&gt;
$ yay -Ps
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Jika berhasil maka akan tampak seperti hasil gambar berikut.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3cgCqVQi0F5O33PRFOfe5jSvzzBGOCgvBlmIjRwusfHtGov9r6DecwhCO6lxyN15eE_-abutVH7Du_aU1Yo2zT9AMTxI-eg7cbQlYxhsxtthoJKnzRr_JkS16oMT4KMJX7a1dOSk9MfP/s1600/Screenshot_2018-06-27_11-58-07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Mengatasi Error While Loading Shared Libraries libalpm.so.10 pada Arch Linux" border="0" data-original-height="454" data-original-width="644" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3cgCqVQi0F5O33PRFOfe5jSvzzBGOCgvBlmIjRwusfHtGov9r6DecwhCO6lxyN15eE_-abutVH7Du_aU1Yo2zT9AMTxI-eg7cbQlYxhsxtthoJKnzRr_JkS16oMT4KMJX7a1dOSk9MfP/s320/Screenshot_2018-06-27_11-58-07.png" title="Cara Mengatasi Error While Loading Shared Libraries libalpm.so.10 pada Arch Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dengan ini, error sudah teratasi dan yaourt pun telah hilang dan tergantikan oleh AUR Helper yay sesuai yang saya inginkan.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Jika ada yang ingin ditanyakan, silakan langsung isikan pertanyaannya pada kolom komentar.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Source: &lt;a href="https://nanxiao.me/en/fix-error-while-loading-shared-libraries-libalpm-so-10-on-archlinux/" target="_blank"&gt;nanxiao&lt;/a&gt;&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/06/cara-mengatasi-error-while-loading-shared-libraries-libalpm-so-10-pada-arch-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw_nX1eexqn8hyphenhyphen0yYlFmiAP3zh2fJOHAknDx1_6DkNCumx287G-MsWCWQ7bZsSe3wIsGlnFIuYBFuyR9PNzm6-Cxh0n-frnjS1PokHmxn-uMZfD8HAtBrlSi8yd9XyIqs7Uym0rfmEf8-G/s72-c/Screenshot_2018-06-27_11-44-45.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-7452669881724090527</guid><pubDate>Wed, 27 Jun 2018 04:01:00 +0000</pubDate><atom:updated>2022-08-14T15:30:56.644+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">news</category><title>Jangan Install Yaourt, Pilihlah Alternatif Berikut Sebagai Ganti AUR Helper di Arch Linux</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMLVYAYTgg8ouoOYhPkyzi1VwU-Z6_QcW4txwQ-5aMLpXkfF8CyAfU0ZUewx4D1C-F-g_1JiT11RtdXwMHTQ7hK2a2Tr1MIjE4f4TItaf_oH5LczyC7MqRmJxy4wFF7Bresc8Awbo6A8Qi/s1600/no-yaourt-arch.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Jangan Install Yaourt, Pilihlah Alternatif Berikut Sebagai Ganti AUR Helper di Arch Linux" loading="lazy" border="0" data-original-height="450" data-original-width="800" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMLVYAYTgg8ouoOYhPkyzi1VwU-Z6_QcW4txwQ-5aMLpXkfF8CyAfU0ZUewx4D1C-F-g_1JiT11RtdXwMHTQ7hK2a2Tr1MIjE4f4TItaf_oH5LczyC7MqRmJxy4wFF7Bresc8Awbo6A8Qi/s320/no-yaourt-arch.jpeg" title="Jangan Install Yaourt, Pilihlah Alternatif Berikut Sebagai Ganti AUR Helper di Arch Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="https://wiki.archlinux.org/index.php/Arch_User_Repository" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;Arch User Repository&lt;/span&gt;&lt;/a&gt; atau populer dikenal dengan AUR adalah repository software dari komunitas yang diperuntukkan bagi pengguna Arch. Untuk pengguna Debian/Ubuntu mungkin AUR bisa dianggap seperti PPA. Berisikan package yang tidak tersedia secara official di repo Arch Linux, memungkinkan end-user untuk mendapatkan software yang mereka inginkan.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Untuk menggunakan AUR, kita membutuhkan sebuah tool. Ada banyak tools tersedia, yang mana tools ini muncul karena Arch package manager &lt;a href="https://wiki.archlinux.org/index.php/pacman" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;pacman&lt;/span&gt;&lt;/a&gt; tidak mendukung AUR secara default. Nah kumpulan tools ini biasa disebut dengan &lt;a href="https://wiki.archlinux.org/index.php/AUR_helpers" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;AUR helpers&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Salah satu yang cukup populer adalah Yaourt (Yet AnOther User Repository Tool). Tool yang satu ini menggunakan perintah yang sama seperti layaknya pacman dan memiliki fitur yang juga bagus seperti penanganan konflik dll. Namun belakangan ini perkembangannya mulai melambat dan juga sebenarnya telah masuk dalam &lt;a href="https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_table" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;daftar tabel&lt;/span&gt;&lt;/a&gt; "Discontinued or problematic".&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lalu masih bolehkah kita menggunakan Yaourt saat ini? Tentunya boleh saja namun jika mengikuti status yang ada wiki, mungkin lebih baik kita mengganti dengan AUR helper lainnya, yang diantaranya yaitu:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;aurman&lt;/li&gt;
&lt;li&gt;yay&lt;/li&gt;
&lt;li&gt;aurutils&lt;/li&gt;
&lt;li&gt;pakku, dll&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Untuk daftar lengkapnya bisa di lihat pada &lt;a href="https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_table" target="_blank"&gt;&lt;span style="color: #6fa8dc;"&gt;tabel perbandingan&lt;/span&gt;&lt;/a&gt; AUR helper. Demikianlah artikel ini, barangkali ada yang perlu ditanyakan silakan isi komentar dibawah.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Source:&amp;nbsp;&lt;a href="https://itsfoss.com/best-aur-helpers/" target="_blank"&gt;itsfoss&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Image source:&amp;nbsp;&lt;a href="https://itsfoss.com/" target="_blank"&gt;itsfoss&lt;/a&gt;&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/06/jangan-install-yaourt-pilih-alternatif-yaourt-di-arch-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMLVYAYTgg8ouoOYhPkyzi1VwU-Z6_QcW4txwQ-5aMLpXkfF8CyAfU0ZUewx4D1C-F-g_1JiT11RtdXwMHTQ7hK2a2Tr1MIjE4f4TItaf_oH5LczyC7MqRmJxy4wFF7Bresc8Awbo6A8Qi/s72-c/no-yaourt-arch.jpeg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-5272872598485412616</guid><pubDate>Mon, 19 Feb 2018 07:50:00 +0000</pubDate><atom:updated>2022-08-14T15:31:04.823+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Download Egghead Video</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJX8baalqiuyBX4WjHc3NeUTItPcPqjyOB5bOwH-EcND5yUpeBYaCAABaVbxn2lssEXPa5IrTzfHSpiE1raYMtOe011x91zSLizDMtZXlzXqg23a1LNQUpf5wf_OKqOHb_CRj334Rdat2w/s1600/video.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Download Egghead VIdeo" border="0" loading="lazy" data-original-height="1236" data-original-width="1600" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJX8baalqiuyBX4WjHc3NeUTItPcPqjyOB5bOwH-EcND5yUpeBYaCAABaVbxn2lssEXPa5IrTzfHSpiE1raYMtOe011x91zSLizDMtZXlzXqg23a1LNQUpf5wf_OKqOHb_CRj334Rdat2w/s320/video.jpg" title="Cara Download Egghead Video" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Di era digital sekarang, banyak tersedia platform kursus yang bisa digunakan secara online. Dengan metode pembelajaran berupa video interaktif dan juga beragam bidang yang tersedia. Akan tetapi sering kali bagi sebagian orang ingin untuk menyimpan video kursus untuk dapat disimpan di komputer ataupun laptop mereka sehingga memudahkan untuk diakses kembali nantinya.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Salah satu kursus online populer untuk developer adalah &lt;a href="http://egghead.io/"&gt;&lt;span style="color: blue;"&gt;egghead.io&lt;/span&gt;&lt;/a&gt;. Saya mengikuti kursus online di website tersebut, dan saya biasanya melakukan download video untuk kursus yang saya ikuti. Untuk bisa melakukan download video langkahnya cukup mudah, disini saya menggunakan OS Linux, jika kalian menggunakan OS yang sama, silakan ikuti langkah berikut:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
# Install youtube-dl script&lt;br /&gt;
sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl&lt;br /&gt;
sudo chmod a+rx /usr/local/bin/youtube-dl&lt;br /&gt;
&lt;br /&gt;
# Install dependency&lt;br /&gt;
sudo pacman -Sy ffmpeg&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Untuk perintah installasi dependency cukup sesuaikan dengan OS yang kalian gunakan lalu aplikasi youtube-dl ini sangat penting untuk proses download video.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya adalah melakukan proses download, buka terminal baru kemudian jalankan perintah berikut, namun sebelumnya silakan akses link kursus yang ingin didownload videonya, semisal dalam kasus ini saya gunakan &lt;a href="https://egghead.io/courses/getting-started-with-redux" target="_blank"&gt;&lt;span style="color: blue;"&gt;Getting Started with Redux&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;div class="code"&gt;
# buat variable 'url' berisikan link kursus&lt;br /&gt;
$ url https://egghead.io/courses/getting-started-with-redux&lt;br /&gt;
&lt;br /&gt;
# jalankan proses download script dan tunggu hingga selesai&lt;br /&gt;
$ cd /home/username/download/video&lt;br /&gt;
$ curl -L $url | grep -o -e 'https://[^"]*.m3u8' | xargs -n1 youtube-dl -o "%(title)s.%(ext)s"&lt;/div&gt;
Pastikan untuk posisikan script download di direktori yang diinginkan dan untuk penampakannya kira-kira seperti gambar dibawah.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu2-wFRFg0SX2NZtcA2Ja2FOBzql_LrkT7t6fZB1CRsRN-71j137hvOqrgDQ_FK9bPlCPEE9aKjtQLpO27Ynrt5TIjSSfEUr6XISIShpdHYaP-HLF-pkaO-pgQ4D1PdBPOmUeeBJLYEZsd/s1600/curl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Download Egghead Video" border="0" data-original-height="1049" data-original-width="961" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu2-wFRFg0SX2NZtcA2Ja2FOBzql_LrkT7t6fZB1CRsRN-71j137hvOqrgDQ_FK9bPlCPEE9aKjtQLpO27Ynrt5TIjSSfEUr6XISIShpdHYaP-HLF-pkaO-pgQ4D1PdBPOmUeeBJLYEZsd/s320/curl.png" title="Cara Download Egghead Video" width="292" /&gt;&lt;/a&gt;&lt;/div&gt;
Proses download berjalan 2x, untuk proses download video dan kemudian untuk audio yang nantinya akan otomatis di merge, jadi pastikan saja untuk ditunggu hingga selesai. Jikalau mau di cancel atau internet terputus tidak perlu khawatir karena bisa di resume kembali, namun pastikan ketika menjalankan script download masih berada di posisi direktori yang sama dengan sebelumnya, juga WAJIB untuk tidak me-rename file video jika belum sepenuhnya complete.&lt;br /&gt;
&lt;br /&gt;
Demikianlah cara download video egghead.io, jika ada kendala jangan lupa untuk berikan komentar pada kolom dibawah.&lt;br /&gt;
&lt;br /&gt;
Source: &lt;a href="https://gist.github.com/shivamkr19/1b964f64bfe04d9d54e0668c6223b765" target="_blank"&gt;shivamkr19&lt;/a&gt;&lt;br /&gt;
Image source: iab&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/02/cara-download-egghead-video.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJX8baalqiuyBX4WjHc3NeUTItPcPqjyOB5bOwH-EcND5yUpeBYaCAABaVbxn2lssEXPa5IrTzfHSpiE1raYMtOe011x91zSLizDMtZXlzXqg23a1LNQUpf5wf_OKqOHb_CRj334Rdat2w/s72-c/video.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-4373441706524750073</guid><pubDate>Thu, 08 Feb 2018 06:58:00 +0000</pubDate><atom:updated>2022-08-14T15:31:12.987+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Install Oracle VM Virtualbox di Archlinux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivMpeq1GrcJQVC75_yrexYSAZV9ZbfvP4vDhDbfAMEEVHky-B2jYr6pxdZvKx0GJxdvJ-r9UW9GEQVznJc56gn_zQgFuZk4RSBwe4_DF8BsacRqkDJ3jdW84No0jnVTctV3TUKPMuhjXJc/s1600/VirtualBox-Is-Not-Opening-After-Updating-Harfbuzz-In-Arch-Linux-2-720x340.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Install Oracle VM Virtualbox di Archlinux" loading="lazy" border="0" data-original-height="340" data-original-width="720" height="151" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivMpeq1GrcJQVC75_yrexYSAZV9ZbfvP4vDhDbfAMEEVHky-B2jYr6pxdZvKx0GJxdvJ-r9UW9GEQVznJc56gn_zQgFuZk4RSBwe4_DF8BsacRqkDJ3jdW84No0jnVTctV3TUKPMuhjXJc/s320/VirtualBox-Is-Not-Opening-After-Updating-Harfbuzz-In-Arch-Linux-2-720x340.png" title="Cara Install Oracle VM Virtualbox di Archlinux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Virtualbox merupakan&amp;nbsp;salah satu software virtualization yang populer dan kaya akan fitur untuk keperluan virtualisasi. Software ini cukup banyak digunakan karena kemudahannya dalam melakukan setup virtualisasi.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dengan dukungan cross-platform yang memungkinkan kita dapat menginstallnya diberagam sistem operasi, memberikan kenyamanan kepada pengguna karena tidak perlu terikat kepada sistem operasi tertentu.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kali ini saya akan melakukan proses installasi di Archlinux. Jika merujuk ke &lt;a href="https://wiki.archlinux.org/index.php/VirtualBox" target="_blank"&gt;&lt;span style="color: blue;"&gt;official wiki&lt;/span&gt;&lt;/a&gt; maka kita akan temukan banyak informasi terkait proses installasi tergantung dengan kebutuhan fitur yang diinginkan. Namun saya akan melakukan proses installasi yang sederhana dengan tujuan virtualbox dapat berjalan.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Langkah awal adalah dengan melakukan installasi package virtualbox, ikut perintah berikut:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ sudo pacman -S virtualbox virtualbox-host-modules-arch&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Host module disini sangat penting untuk diinstall karena terkait dengan kernel yang digunakan oleh Archlinux.&lt;br /&gt;
&lt;br /&gt;
Setelah proses installasi selesai, kita perlu untuk menambahkan host module agar dapat digunakan oleh kernel dan juga menambahkan akun user ke grup virtualbox untuk dapat menggunakan fitur-fitur yang disediakan oleh virtualbox, lakukan dengan perintah berikut:&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo modprobe vboxdrv &lt;br /&gt;
$ sudo gpasswd -a your_linux_username vboxusers
&lt;/div&gt;
Lalu untuk langkah terakhir yaitu menginstall Extension pack untuk fitur tambahan yang tidak tersedia secara default di virtualbox. Package ini tidak tersedia di official package melainkan di user community package jadi proses installasi dapat dilakukan dengan menggunakan yaourt.&lt;br /&gt;
&lt;div class="code"&gt;
$ yaourt virtualbox-ext-oracle
&lt;/div&gt;
Sampai disini semua proses sudah selesai, untuk itu silakan terlebih dahulu restart sistem dan kemudian jalankan aplikasi virtualbox yang sudah berhasil terinstall. Selamat mencoba dan jangan lupa berikan komentar terkait kendala ataupun hal lainnya di kolom komentar.&lt;br /&gt;
&lt;br /&gt;
Image source: ostechnix&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/02/cara-install-oracle-vm-virtualbox-di-arch-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivMpeq1GrcJQVC75_yrexYSAZV9ZbfvP4vDhDbfAMEEVHky-B2jYr6pxdZvKx0GJxdvJ-r9UW9GEQVznJc56gn_zQgFuZk4RSBwe4_DF8BsacRqkDJ3jdW84No0jnVTctV3TUKPMuhjXJc/s72-c/VirtualBox-Is-Not-Opening-After-Updating-Harfbuzz-In-Arch-Linux-2-720x340.png" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-376038134634992590</guid><pubDate>Sun, 07 Jan 2018 02:27:00 +0000</pubDate><atom:updated>2022-08-14T15:31:20.007+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">simple and useful</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Mudah Melihat File Size di Linux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhik-5_KF9mRcE7sODieadUo_EkU9ogbLSWEgDElDGpothnAGQdIbGpNrj-ZhQ-Y1hbc9ELQi2Dgr_LwQD4LIoOF9WVjvxz6Rfr7n_yCz8E0yXXgDZxmPABsCkQn2wt7lw5TIe1GWKkrPkF/s1600/du-simple-945x400.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Mudah Melihat File Size di Linux" loading="lazy" border="0" data-original-height="401" data-original-width="945" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhik-5_KF9mRcE7sODieadUo_EkU9ogbLSWEgDElDGpothnAGQdIbGpNrj-ZhQ-Y1hbc9ELQi2Dgr_LwQD4LIoOF9WVjvxz6Rfr7n_yCz8E0yXXgDZxmPABsCkQn2wt7lw5TIe1GWKkrPkF/s320/du-simple-945x400.jpg" title="Cara Mudah Melihat File Size di Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dalam menggunakan&amp;nbsp;Linux CLI setidaknya&amp;nbsp;ada beberapa command favorite bagi pengguna tertentu yang dianggap sangat membantu. Tapi ada kondisi dimana kita tidak tahu command apa yang harus digunakan untuk masalah yang dihadapi, contohnya bagaimana untuk melihat file size dalam sebuah direktori.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Hal tersebut menjadi masalah yang saya hadapi sebelumnya hingga akhirnya saya menemukan command yang tepat yaitu mendapatkan list file yang berurutan dan dengan size yang human readable tentunya yaitu dengan command du.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Cara menggunakannya cukup mudah, silakan copas command berikut pada direktori yang diinginkan.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ du -hsx * | sort -rh
&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Command di atas akan menampilkan list file dengan size yang human readable mulai dari file dengan size terbesar hingga terkecil seperti contoh gambar berikut:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9xdPh3bVZW9KE_cvTCQ3g6gVYry2TqwfO0aBKUyjC7AgMWUssB57_JwCM8CoupSCxVHORjZUWjRSV2BehcBcy-6DB2bblTzGr2nXtneTgcRdKGFfY9H6DK79iJdwMu8dLcM39qFqCGqr/s1600/du_output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Mudah Melihat File Size di Linux" border="0" data-original-height="455" data-original-width="644" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA9xdPh3bVZW9KE_cvTCQ3g6gVYry2TqwfO0aBKUyjC7AgMWUssB57_JwCM8CoupSCxVHORjZUWjRSV2BehcBcy-6DB2bblTzGr2nXtneTgcRdKGFfY9H6DK79iJdwMu8dLcM39qFqCGqr/s320/du_output.png" title="Cara Mudah Melihat File Size di Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Sangat mudah dibaca file size yang tertampil tersebut, namun jika ingin menghasilkan tampilan yang lainnya jangan lupa untuk melihat manual penggunaan command tersebut dengan perintah $ man nama_command.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Demikianlah artikel singkat ini, semoga dapat bermanfaat dan selamat mencoba. Tentunya jangan lupa untuk mengisi kolom komentar dibawah untuk hal-hal yang ingin ditanyakan atau didiskusikan.&lt;br /&gt;
&lt;br /&gt;
Image source: fedoramagazine&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2018/01/cara-mudah-melihat-file-size-atau-disk-usage-di-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhik-5_KF9mRcE7sODieadUo_EkU9ogbLSWEgDElDGpothnAGQdIbGpNrj-ZhQ-Y1hbc9ELQi2Dgr_LwQD4LIoOF9WVjvxz6Rfr7n_yCz8E0yXXgDZxmPABsCkQn2wt7lw5TIe1GWKkrPkF/s72-c/du-simple-945x400.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-5843946605984554333</guid><pubDate>Sat, 16 Dec 2017 01:36:00 +0000</pubDate><atom:updated>2022-08-14T15:31:26.293+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Instalasi Android SDK Untuk Development MeteorJS di Linux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6cjy6usG0FsOtc-BU3Mb7t1qPhbLo51FYa3GxgzQNFxeAPgNLSVLiZ2u0RaIeGzV-jFe98V8aN2NFmZlPbWtUFjYl7uwAHN-eEe5ecg61riblNaad2sT6BIU01dbFPhvzoYYWmCa_OsLu/s1600/How-to-setup-Android-Studio-for-Meteor.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Instalasi Android SDK Untuk Development MeteorJS di Linux" loading="lazy" border="0" data-original-height="500" data-original-width="810" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6cjy6usG0FsOtc-BU3Mb7t1qPhbLo51FYa3GxgzQNFxeAPgNLSVLiZ2u0RaIeGzV-jFe98V8aN2NFmZlPbWtUFjYl7uwAHN-eEe5ecg61riblNaad2sT6BIU01dbFPhvzoYYWmCa_OsLu/s320/How-to-setup-Android-Studio-for-Meteor.jpg" title="Instalasi Android SDK Untuk Development MeteorJS di Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Android studio adalah salah satu&amp;nbsp;development tool yang populer&amp;nbsp;dalam pengembangan aplikasi mobile dengan pemrograman native, namun ada juga alternatif lain bagi selain native yaitu dengan Javascript yang salah satunya yaitu full stack framework MeteorJS. Saya kali ini akan memberikan tutorial cara integrasi MeteorJS dengan lingkungan mobile yang membutuhkan SDK dari android untuk Linux (saya menggunakan archlinux).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Langkah awal pastikan mendownload hanya SDK terlebih dahulu, tidak perlu android studio (install langsung android studio adalah alternatif rekomendasi) yang bisa langsung download &lt;a href="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip" target="_blank"&gt;&lt;span style="color: blue;"&gt;disini&lt;/span&gt;&lt;/a&gt;&amp;nbsp;atau pilihan versi lainnya di &lt;a href="https://developer.android.com/studio/index.html#downloads" target="_blank"&gt;&lt;span style="color: blue;"&gt;android official website&lt;/span&gt;&lt;/a&gt;&amp;nbsp;dan tidak ketinggalan juga untuk gradle harus di download &lt;a href="https://services.gradle.org/distributions/gradle-4.4-all.zip" target="_blank"&gt;&lt;span style="color: blue;"&gt;disini&lt;/span&gt;&lt;/a&gt;&amp;nbsp;atau versi lainnya di &lt;a href="https://gradle.org/releases/" target="_blank"&gt;&lt;span style="color: blue;"&gt;gradle official website&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Selesai mendownload, cukup ekstrak di home direcotry ataupun directory yang diinginkan, saya asumsikan hasil ekstrak berada dalam /home/user/android/sdk dan /home/user/android/gradle. Langkah pertama yaitu perlu untuk menginstall package yang dibutuhkan dengan perintah berikut:&lt;br /&gt;
&lt;div class="code"&gt;
$ cd /home/user/android/sdk/tools/bin&lt;br /&gt;
$ ./sdkmanager --help&lt;br /&gt;
$ ./sdkmanager --update&lt;br /&gt;
$ ./sdkmanager --list&lt;br /&gt;
$ ./sdkmanager "build-tools;27.0.2"&lt;br /&gt;
$ ./sdkmanager "platforms;android-27"&lt;br /&gt;
$ ./sdkmanager "platform-tools"&lt;br /&gt;
&lt;br /&gt;
** opsi untuk menghindari error no space left directory /tmp&lt;br /&gt;
$ mkdir ~/Downloads/PackageOperation01&lt;br /&gt;
$ sudo ln -s ~/Download/PackageOperation01 /tmp/PackageOperation01&lt;br /&gt;
&lt;br /&gt;
$ ./sdkmanager "system-images;android-27;google_apis;x86"&lt;/div&gt;
Sampai disini package minimum sudah selesai, kemudian dilanjutkan dengan mengaktifkan konektifitas ke handphone atau dikenal dengan USB debugging.&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo pacman -S libmtp android-tools android-udev&lt;br /&gt;
$ adb devices &amp;lt;== (utk memastikan hp sudah terhubung)&lt;/div&gt;
Kemudian kita lanjutkan dengan membuat android virtual device (AVD). Jadi nanti tinggal tentukan sendiri ingin menggunakan hp secara langsung atau AVD. Tapi sebelumnya perlu untuk menambah PATH untuk gradle dan SDK agar kedepan bisa dengan mudah mengeksekusi script tanpa perlu change direcotry, cukup copas kode berikut ke ~/.bashrc:&lt;br /&gt;
&lt;div class="code"&gt;
# Android SDK&lt;br /&gt;
export ANDROID_HOME="$HOME/android/sdk"&lt;br /&gt;
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools&lt;br /&gt;
# Gradle&lt;br /&gt;
export PATH=$PATH:$HOME/android/gradle/gradle-4.4/bin&lt;/div&gt;
Selanjutnya membuat AVD yang langkahnya juga cukup mudah.&lt;br /&gt;
&lt;div class="code"&gt;
$ cd /home/user/android/sdk/tools&lt;br /&gt;
$ ./avdmanager --help&lt;br /&gt;
$ ./avdmanager list target&lt;br /&gt;
$ ./avdmanager list device&lt;br /&gt;
$ ./avdmanager -v create avd --force --name meteorjsAVD --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' $ ./avdmanager list avd &amp;lt;== melihat avd yang telah dibuat&lt;br /&gt;
$ ./emulator -avd meteorAVD &amp;lt;== menjalankan avd&lt;/div&gt;
Semua proses sudah selesai dan seharusnya AVD dapat berfungsi dengan baik. Namun terkadang ada kendala saat menjalankan AVD, semisal jika mengalami **emulator: WARNING: cannot read adb public key file: /home/user/.android/adbkey.pub** maka jalankan kembali perintah $adb devices dan pastikan untuk memberikan akses koneksi adb yang biasanya muncul di layar hp.&lt;br /&gt;
Dan juga apabila mengalami **libGL error: unable to load driver: i965_dri.so** cukup lakukan perintah berikut:&lt;br /&gt;
&lt;div class="code"&gt;
$ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6{,.bak}&lt;br /&gt;
$ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6.0.18{,.bak}&lt;br /&gt;
$ sudo ln -s /usr/lib/libstdc++.so /home/user/android/sdk/emulator/lib64/libstdc++/&lt;/div&gt;
Dengan begitu seharusnya AVD dapat berfungsi dengan baik. Lalu langkah terakhir adalah dengan menginstall platform android di proyek aplikasi meteor yang ada.&lt;br /&gt;
&lt;br /&gt;
Perlu diketahui, MeteorJS saat ini masih membutuhkan API android level 25, jadi silakan install API level 25 dengan langkah yang sama seperti API level 27 diatas.&lt;br /&gt;
&lt;br /&gt;
Demikian langkah yang diperlukan untuk menginstall android sdk tanpa android studio. Jika mengalami kendala harap berikan komentar pada kolom dibawah.&lt;br /&gt;
&lt;br /&gt;
Image source: seekerswiki&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2017/12/install-android-sdk-untuk-development-meteorjs-di-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6cjy6usG0FsOtc-BU3Mb7t1qPhbLo51FYa3GxgzQNFxeAPgNLSVLiZ2u0RaIeGzV-jFe98V8aN2NFmZlPbWtUFjYl7uwAHN-eEe5ecg61riblNaad2sT6BIU01dbFPhvzoYYWmCa_OsLu/s72-c/How-to-setup-Android-Studio-for-Meteor.jpg" width="72"/><thr:total>0</thr:total><enclosure length="136964098" type="application/zip" url="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"/><itunes:explicit/><itunes:subtitle>Android studio adalah salah satu&amp;nbsp;development tool yang populer&amp;nbsp;dalam pengembangan aplikasi mobile dengan pemrograman native, namun ada juga alternatif lain bagi selain native yaitu dengan Javascript yang salah satunya yaitu full stack framework MeteorJS. Saya kali ini akan memberikan tutorial cara integrasi MeteorJS dengan lingkungan mobile yang membutuhkan SDK dari android untuk Linux (saya menggunakan archlinux). Langkah awal pastikan mendownload hanya SDK terlebih dahulu, tidak perlu android studio (install langsung android studio adalah alternatif rekomendasi) yang bisa langsung download disini&amp;nbsp;atau pilihan versi lainnya di android official website&amp;nbsp;dan tidak ketinggalan juga untuk gradle harus di download disini&amp;nbsp;atau versi lainnya di gradle official website. Selesai mendownload, cukup ekstrak di home direcotry ataupun directory yang diinginkan, saya asumsikan hasil ekstrak berada dalam /home/user/android/sdk dan /home/user/android/gradle. Langkah pertama yaitu perlu untuk menginstall package yang dibutuhkan dengan perintah berikut: $ cd /home/user/android/sdk/tools/bin $ ./sdkmanager --help $ ./sdkmanager --update $ ./sdkmanager --list $ ./sdkmanager "build-tools;27.0.2" $ ./sdkmanager "platforms;android-27" $ ./sdkmanager "platform-tools" ** opsi untuk menghindari error no space left directory /tmp $ mkdir ~/Downloads/PackageOperation01 $ sudo ln -s ~/Download/PackageOperation01 /tmp/PackageOperation01 $ ./sdkmanager "system-images;android-27;google_apis;x86" Sampai disini package minimum sudah selesai, kemudian dilanjutkan dengan mengaktifkan konektifitas ke handphone atau dikenal dengan USB debugging. $ sudo pacman -S libmtp android-tools android-udev $ adb devices &amp;lt;== (utk memastikan hp sudah terhubung) Kemudian kita lanjutkan dengan membuat android virtual device (AVD). Jadi nanti tinggal tentukan sendiri ingin menggunakan hp secara langsung atau AVD. Tapi sebelumnya perlu untuk menambah PATH untuk gradle dan SDK agar kedepan bisa dengan mudah mengeksekusi script tanpa perlu change direcotry, cukup copas kode berikut ke ~/.bashrc: # Android SDK export ANDROID_HOME="$HOME/android/sdk" export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools # Gradle export PATH=$PATH:$HOME/android/gradle/gradle-4.4/bin Selanjutnya membuat AVD yang langkahnya juga cukup mudah. $ cd /home/user/android/sdk/tools $ ./avdmanager --help $ ./avdmanager list target $ ./avdmanager list device $ ./avdmanager -v create avd --force --name meteorjsAVD --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' $ ./avdmanager list avd &amp;lt;== melihat avd yang telah dibuat $ ./emulator -avd meteorAVD &amp;lt;== menjalankan avd Semua proses sudah selesai dan seharusnya AVD dapat berfungsi dengan baik. Namun terkadang ada kendala saat menjalankan AVD, semisal jika mengalami **emulator: WARNING: cannot read adb public key file: /home/user/.android/adbkey.pub** maka jalankan kembali perintah $adb devices dan pastikan untuk memberikan akses koneksi adb yang biasanya muncul di layar hp. Dan juga apabila mengalami **libGL error: unable to load driver: i965_dri.so** cukup lakukan perintah berikut: $ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6{,.bak} $ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6.0.18{,.bak} $ sudo ln -s /usr/lib/libstdc++.so /home/user/android/sdk/emulator/lib64/libstdc++/ Dengan begitu seharusnya AVD dapat berfungsi dengan baik. Lalu langkah terakhir adalah dengan menginstall platform android di proyek aplikasi meteor yang ada. Perlu diketahui, MeteorJS saat ini masih membutuhkan API android level 25, jadi silakan install API level 25 dengan langkah yang sama seperti API level 27 diatas. Demikian langkah yang diperlukan untuk menginstall android sdk tanpa android studio. Jika mengalami kendala harap berikan komentar pada kolom dibawah. Image source: seekerswiki</itunes:subtitle><itunes:author>noreply@blogger.com (Bill)</itunes:author><itunes:summary>Android studio adalah salah satu&amp;nbsp;development tool yang populer&amp;nbsp;dalam pengembangan aplikasi mobile dengan pemrograman native, namun ada juga alternatif lain bagi selain native yaitu dengan Javascript yang salah satunya yaitu full stack framework MeteorJS. Saya kali ini akan memberikan tutorial cara integrasi MeteorJS dengan lingkungan mobile yang membutuhkan SDK dari android untuk Linux (saya menggunakan archlinux). Langkah awal pastikan mendownload hanya SDK terlebih dahulu, tidak perlu android studio (install langsung android studio adalah alternatif rekomendasi) yang bisa langsung download disini&amp;nbsp;atau pilihan versi lainnya di android official website&amp;nbsp;dan tidak ketinggalan juga untuk gradle harus di download disini&amp;nbsp;atau versi lainnya di gradle official website. Selesai mendownload, cukup ekstrak di home direcotry ataupun directory yang diinginkan, saya asumsikan hasil ekstrak berada dalam /home/user/android/sdk dan /home/user/android/gradle. Langkah pertama yaitu perlu untuk menginstall package yang dibutuhkan dengan perintah berikut: $ cd /home/user/android/sdk/tools/bin $ ./sdkmanager --help $ ./sdkmanager --update $ ./sdkmanager --list $ ./sdkmanager "build-tools;27.0.2" $ ./sdkmanager "platforms;android-27" $ ./sdkmanager "platform-tools" ** opsi untuk menghindari error no space left directory /tmp $ mkdir ~/Downloads/PackageOperation01 $ sudo ln -s ~/Download/PackageOperation01 /tmp/PackageOperation01 $ ./sdkmanager "system-images;android-27;google_apis;x86" Sampai disini package minimum sudah selesai, kemudian dilanjutkan dengan mengaktifkan konektifitas ke handphone atau dikenal dengan USB debugging. $ sudo pacman -S libmtp android-tools android-udev $ adb devices &amp;lt;== (utk memastikan hp sudah terhubung) Kemudian kita lanjutkan dengan membuat android virtual device (AVD). Jadi nanti tinggal tentukan sendiri ingin menggunakan hp secara langsung atau AVD. Tapi sebelumnya perlu untuk menambah PATH untuk gradle dan SDK agar kedepan bisa dengan mudah mengeksekusi script tanpa perlu change direcotry, cukup copas kode berikut ke ~/.bashrc: # Android SDK export ANDROID_HOME="$HOME/android/sdk" export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools # Gradle export PATH=$PATH:$HOME/android/gradle/gradle-4.4/bin Selanjutnya membuat AVD yang langkahnya juga cukup mudah. $ cd /home/user/android/sdk/tools $ ./avdmanager --help $ ./avdmanager list target $ ./avdmanager list device $ ./avdmanager -v create avd --force --name meteorjsAVD --abi google_apis/x86 --package 'system-images;android-27;google_apis;x86' $ ./avdmanager list avd &amp;lt;== melihat avd yang telah dibuat $ ./emulator -avd meteorAVD &amp;lt;== menjalankan avd Semua proses sudah selesai dan seharusnya AVD dapat berfungsi dengan baik. Namun terkadang ada kendala saat menjalankan AVD, semisal jika mengalami **emulator: WARNING: cannot read adb public key file: /home/user/.android/adbkey.pub** maka jalankan kembali perintah $adb devices dan pastikan untuk memberikan akses koneksi adb yang biasanya muncul di layar hp. Dan juga apabila mengalami **libGL error: unable to load driver: i965_dri.so** cukup lakukan perintah berikut: $ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6{,.bak} $ mv /home/user/android/sdk/emulator/lib64/libstdc++/libstdc++.so.6.0.18{,.bak} $ sudo ln -s /usr/lib/libstdc++.so /home/user/android/sdk/emulator/lib64/libstdc++/ Dengan begitu seharusnya AVD dapat berfungsi dengan baik. Lalu langkah terakhir adalah dengan menginstall platform android di proyek aplikasi meteor yang ada. Perlu diketahui, MeteorJS saat ini masih membutuhkan API android level 25, jadi silakan install API level 25 dengan langkah yang sama seperti API level 27 diatas. Demikian langkah yang diperlukan untuk menginstall android sdk tanpa android studio. Jika mengalami kendala harap berikan komentar pada kolom dibawah. Image source: seekerswiki</itunes:summary><itunes:keywords>android, arch linux, programming</itunes:keywords></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-907427124754362088</guid><pubDate>Mon, 04 Dec 2017 03:05:00 +0000</pubDate><atom:updated>2022-08-14T15:31:32.985+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">debian</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Membuat Wi-Fi Hotspot di Linux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfxSaYWiKw48rhpPUsYQcpDm1nRUn9uwhCPR9JyFtdI0EcZur2hi4cjjwH-LZxaYINcgL4CFM8-0X1O2ufUgk2gwRthcHheKtAg_euydHKJWjjurhDIQvfIoiMYk_GDZGiscmpBSrkkxGf/s1600/hotspot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Membuat Wi-Fi Hotspot di Linux" border="0" data-original-height="350" loading="lazy" data-original-width="350" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfxSaYWiKw48rhpPUsYQcpDm1nRUn9uwhCPR9JyFtdI0EcZur2hi4cjjwH-LZxaYINcgL4CFM8-0X1O2ufUgk2gwRthcHheKtAg_euydHKJWjjurhDIQvfIoiMYk_GDZGiscmpBSrkkxGf/s320/hotspot.jpg" title="Cara Membuat Wi-Fi Hotspot di Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pada artikel&amp;nbsp;kali ini, saya akan&amp;nbsp;memberikan cara bagaimana membuat Wi-Fi hotspot di Linux. Kebetulan saya baru melakukan install ulang laptop yang juga biasanya saya jadikan Access Point pada perangkat Wi-Fi yang ada.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mungkin bagi pengguna Distro seperti Ubuntu ataupun jenis distro lainnya yang sudah memiliki desktop environment yang komplit bisa dengan mudah membuat hotspot, namun berbeda dengan pengguna yang lebih senang menggunakan CLI sehingga memerlukan software tambahan untuk bisa membuat hotspot, yang umum digunakan ialah hostapd.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Langkah yang perlu dilakukan cukup mudah, namun disini saya sampaikan bahwa saya akan menggunakan dhcp server untuk mengatur IP pada client dan saya menggunakan Debian. Pertama lakukan proses installasi untuk package berikut:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="code"&gt;
$ sudo apt-get install hostapd isc-dhcp-server&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Kemudian lakukan konfigurasi pada dhcp server terlebih dahulu, untuk IP address bisa menyesuaikan keinginan.&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo nano /etc/default/isc-dhcp-server&lt;br /&gt;
.. INTERFACES="wlan1"&lt;br /&gt;
&lt;br /&gt;
$ sudo nano /etc/dhcp/dhcpd.conf&lt;br /&gt;
subnet 59.10.33.0 netmask 255.255.255.0 {&lt;br /&gt;
&amp;nbsp;        range 59.10.33.2 59.10.33.16;&lt;br /&gt;
&amp;nbsp;        option domain-name-servers 8.8.8.8;&lt;br /&gt;
&amp;nbsp;        option routers 59.10.33.1;&lt;br /&gt;
}&lt;/div&gt;
Perlu diperhatikan pada bagian intefaces biasanya tiap perangkat Wi-Fi memiliki nama yang berbeda, jadi silahkan cek dulu dengan perintah $ ifconfig (lihat bagian Wi-Fi). Lalu langkah terakhir lakukan konfigurasi pada hostapd sebagai berikut.&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo nano /etc/hostapd/hostapd.conf&lt;br /&gt;
interface=wlan1&lt;br /&gt;
driver=nl80211&lt;br /&gt;
ssid=nama_wifi&lt;br /&gt;
hw_mode=g&lt;br /&gt;
channel=1&lt;br /&gt;
macaddr_acl=0&lt;br /&gt;
auth_algs=1&lt;br /&gt;
ignore_broadcast_ssid=0&lt;br /&gt;
wpa=3&lt;br /&gt;
wpa_passphrase=password_wifi&lt;br /&gt;
wpa_key_mgmt=WPA-PSK&lt;br /&gt;
wpa_pairwise=TKIP&lt;br /&gt;
rsn_pairwise=CCMP&lt;/div&gt;
Setelah selesai, bisa langsung coba jalankan service tersebut.&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo systemctl start hostapd&lt;br /&gt;
$ sudo systemctl start isc-dhpcp-server
&lt;/div&gt;
Lalu coba cek melalui handphone ataupun perangkat lainnya apakah hotspot yang dibuat berhasil berfungsi, jika berhasil coba lakukan akses jaringan ke sosmed ataupun yang lainnya.&lt;br /&gt;
&lt;br /&gt;
Silakan berikan komentar pada kolom dibawah jika ada kendala ataupun koreksi dari konfigurasi diatas.&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2017/12/cara-membuat-wifi-hotspot-di-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfxSaYWiKw48rhpPUsYQcpDm1nRUn9uwhCPR9JyFtdI0EcZur2hi4cjjwH-LZxaYINcgL4CFM8-0X1O2ufUgk2gwRthcHheKtAg_euydHKJWjjurhDIQvfIoiMYk_GDZGiscmpBSrkkxGf/s72-c/hotspot.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4231702298745313025.post-2082737057343338637</guid><pubDate>Sun, 12 Nov 2017 01:27:00 +0000</pubDate><atom:updated>2022-08-14T15:31:38.638+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arch linux</category><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">tips tricks</category><title>Cara Setup USB Modem di Arch Linux</title><description>&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBhax8uDMz7a9ElUd4U3yN1xINeLYD6xZrelea0F2my4hwzA9OtXJhDpAVmSOfSjQmxfzB845nL6HgaVxDcoXJILa60YDBHbKMfECT2t3IndRN-3FBZmGxMBsKM29u0FAoNmOF-6B-Hzvx/s1600/usb-modem-cover.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Cara Setup USB Modem di Linux" border="0" data-original-height="400" loading="lazy" data-original-width="800" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBhax8uDMz7a9ElUd4U3yN1xINeLYD6xZrelea0F2my4hwzA9OtXJhDpAVmSOfSjQmxfzB845nL6HgaVxDcoXJILa60YDBHbKMfECT2t3IndRN-3FBZmGxMBsKM29u0FAoNmOF-6B-Hzvx/s320/usb-modem-cover.jpeg" title="Cara Setup USB Modem di Linux" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Menggunakan USB modem di linux memang terkadang selalu ada masalah, terlebih lagi jika USB modem yang digunakan itu termasuk kategori yang memang sulit untuk digunakan di linux. Namun bagaimanapun juga ada banyak cara yang bisa dilakukan untuk mengatasinya, memang caranya sedikit lebih ribet bagi pemula tapi layak untuk dicoba pastinya.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Saya baru-baru ini dan untuk pertama kalinya menggunakan Distro Linux selain dari Debian (baik turunannya) yaitu Arch Linux. Linux yang satu ini sangat populer, maka dari itu saya putuskan untuk menggunakan mulai dari sekarang dan ntah sampai kapan akan berganti lagi.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Karena Arch Linux dikenal lekat dengan customization, jadi untuk dapat menggunakan USB modem perlu melakukan beberapa langkah, berikut ini saya berikan tahapannya (saya asumsikan kita sudah memiliki DE dan belum bisa menggunakan USB modem di network manager).&lt;/div&gt;
&lt;h4 style="text-align: justify;"&gt;
Lakukan identifikasi modem USB dan sim card&lt;/h4&gt;
&lt;div&gt;
Jika sim card yang digunakan memiliki PIN, maka perlu untuk menonaktifkannya terlebih dahulu (lewati langkah ini jika tidak memiliki PIN pada sim card).&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
$ sudo mmcli -i SIMNUMBER --pin=XXXX&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
Kemudian pastikan modem sudah terdeteksi saat dicolok.&lt;/div&gt;
&lt;div&gt;
&lt;div class="code"&gt;
[bill@archy ~]$ lsusb&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
Bus 001 Device 004: ID 8087:0a2b Intel Corp.&lt;br /&gt;
Bus 001 Device 003: ID 04f2:b57a Chicony Electronics Co., Ltd&lt;br /&gt;
Bus 001 Device 002: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard &amp;lt;== status modem yg berhasil terdeteksi&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;/div&gt;
&lt;span style="text-align: justify;"&gt;Contoh hasil diatas&amp;nbsp;menandakan USB modem sudah bisa digunakan, tapi pada umumnya saat pertama kali dicolok USB modem akan memiliki 2 mode yaitu sebagai flash storage dan USB modem. Untuk mengatasi hal tersebut cukup ikuti langkah berikut:&lt;/span&gt;&lt;br /&gt;
&lt;div class="code"&gt;
$ sudo pacman -S usbutils usb_modeswitch modemmanager mobile-broadband-provider-info nm-connection-editor&lt;br /&gt;
$ sudo systemctl enable ModemManager&lt;br /&gt;
$ sudo pacman -S modem-manager-gui &amp;lt;== jika menginginkan aplikasi modem GUI (optional)&lt;br /&gt;
$ sudo reboot&lt;/div&gt;
&lt;span style="text-align: justify;"&gt;Sampai disini setelah restart maka seharusnya kita sudah bisa membuat profile koneksi dan membuat koneksi internet dengan USB modem.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Demikianlah langkah sederhana yang dilakukan untuk menggunakan USB modem di Arch Linux, jika mengalami kendala silahkan berikan komentar pada kolom dibawah.&lt;/div&gt;
&lt;br /&gt;
source:&amp;nbsp;&lt;a href="https://wiki.archlinux.org/index.php/USB_3G_Modem" target="_blank"&gt;USB Modem&lt;/a&gt;&lt;br /&gt;
image source: &lt;a href="http://maketecheasier.com/" target="_blank"&gt;maketecheasier&lt;/a&gt;&lt;/div&gt;
</description><link>http://billnode.blogspot.com/2017/11/cara-setup-usb-modem-di-arch-linux.html</link><author>noreply@blogger.com (Bill)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBhax8uDMz7a9ElUd4U3yN1xINeLYD6xZrelea0F2my4hwzA9OtXJhDpAVmSOfSjQmxfzB845nL6HgaVxDcoXJILa60YDBHbKMfECT2t3IndRN-3FBZmGxMBsKM29u0FAoNmOF-6B-Hzvx/s72-c/usb-modem-cover.jpeg" width="72"/><thr:total>0</thr:total></item></channel></rss>