<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6534883643914561131</atom:id><lastBuildDate>Mon, 07 Oct 2024 06:05:26 +0000</lastBuildDate><category>Ubuntu</category><category>Java</category><category>PostgreSQL</category><category>Linux</category><category>JasperReports</category><category>Query</category><category>SQL</category><category>Apache Maven</category><category>Maven</category><category>Netbeans</category><category>Netbeans IDE</category><category>Swing</category><category>iReport</category><category>Apache Derby</category><category>Bash</category><category>Git</category><category>Jasper Reports</category><category>Java DB</category><category>64bit</category><category>Agile</category><category>Android</category><category>AutoCompletion</category><category>Backup</category><category>Banana Pi</category><category>Binary Data</category><category>Bluetooth</category><category>Buku</category><category>CSV</category><category>Configuration</category><category>Console</category><category>Debugging</category><category>Dell Inspiron 14R</category><category>Diff Tool</category><category>Drill Down</category><category>Extreme Programming</category><category>Glassfish</category><category>Google Gson</category><category>HDD Caddy</category><category>HDMI to VGA</category><category>Harddisk Eksternal</category><category>Hardware</category><category>HashMap</category><category>Ice Cream Sandwich</category><category>JIDE OSS Common Layer</category><category>JVM Language</category><category>Java 8</category><category>Java Notes</category><category>Json</category><category>Kotlin</category><category>Lambda Expression</category><category>Mac OSX</category><category>Map</category><category>Markdown</category><category>Maven2</category><category>Medium</category><category>Meld</category><category>Monitor Out Of Range</category><category>Mounting</category><category>MySQL</category><category>NullPointerException</category><category>PL/PGSQL</category><category>PL/SQL</category><category>PLPGSQL</category><category>PLSQL</category><category>Pair Programming</category><category>Personal</category><category>Pindahan</category><category>Popup Notification</category><category>Precise Pangolin</category><category>Programming Font</category><category>ROWNUM</category><category>ROW_NUMBER</category><category>Raspberry Pi</category><category>Rhythmbox</category><category>SSD</category><category>SSH</category><category>Screenshot Tool</category><category>Shell</category><category>Shutter</category><category>Stored Procedure</category><category>String</category><category>Terminal</category><category>Tools</category><category>Ubuntu 12.04</category><category>Ubuntu 14.04</category><category>User Management</category><category>Version Control</category><category>Wireless</category><category>XP</category><category>Xperia Go</category><category>bytea_output</category><title>– Java Programming World</title><description>~ Where being fanatic can be fun ~&#xa;Java, Linux-Ubuntu, PostgreSQL</description><link>http://javanatics.blogspot.com/</link><managingEditor>noreply@blogger.com (Eko Suhariyadi)</managingEditor><generator>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-168600068712245851</guid><pubDate>Fri, 01 Mar 2019 04:00:00 +0000</pubDate><atom:updated>2019-03-01T11:00:39.732+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Medium</category><title>I move on to Medium</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Halo teman-teman blogger, saya&amp;nbsp;berhenti menulis di blog ini dan melanjutkan sharing saya di &lt;a href=&quot;https://medium.com/@ekosuhariyadi&quot; target=&quot;_blank&quot;&gt;Medium&lt;/a&gt;&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2019/03/i-move-on-to-medium.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-3453964562637747072</guid><pubDate>Tue, 02 Jan 2018 06:01:00 +0000</pubDate><atom:updated>2018-01-02T13:01:17.249+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Agile</category><category domain="http://www.blogger.com/atom/ns#">Extreme Programming</category><category domain="http://www.blogger.com/atom/ns#">Pair Programming</category><category domain="http://www.blogger.com/atom/ns#">XP</category><title>XP | Pair Programming di Mata Dummy</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Tak terasa&amp;nbsp;2018 sudah&amp;nbsp;memasuki hari ke-2, resolusi tahun lalu nampaknya masih belum bisa terpenuhi karena hanya sebatas tertulis di ingatan, yang alangkah lebih baik jika di tulis secara visual.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Tapi kali ini saya tidak akan membahas mengenai resolusi tahun 2018. &lt;br /&gt;
Di posting kali ini saya ingin berbagi pengalaman saya menjalankan &lt;a href=&quot;https://en.wikipedia.org/wiki/Pair_programming&quot; target=&quot;_blank&quot;&gt;Pair Programming&lt;/a&gt; selama lebih kurang 7 bulan di perusahaan tempat saya bekerja sekarang. &lt;br /&gt;Saya sudah mengetahui Pair Programming ini saat masih di perusahaan lama, namun di perusahaan baru inilah saya langsung mengalaminya sendiri. Jika diterjemahkan secara praktek, &lt;i&gt;Pair Programming&lt;/i&gt;&amp;nbsp;adalah dua orang programmer bekerja secara bersamaan dengan 1 workspace saja (1 komputer, 2 programmer, 2 mouse dan 2 keyboard ^_^). Bersamaan di sini bukan berarti 2 programmer tersebut &quot;mengetik kode secara bersamaan&quot;, melainkan mereka bekerja sama dalam menyelesaikan suatu &lt;a href=&quot;https://www.mountaingoatsoftware.com/agile/user-stories&quot; style=&quot;font-style: italic;&quot; target=&quot;_blank&quot;&gt;story&lt;/a&gt;. Secara istilah 2 programmer tersebut dibagi menjadi dua role&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;i&gt;&lt;b&gt;Driver&lt;/b&gt;&lt;/i&gt;, programmer yang bertugas mengetik kode, dan&lt;/li&gt;
&lt;li&gt;&lt;i style=&quot;font-weight: bold;&quot;&gt;Navigator/Observer&lt;/i&gt;,&amp;nbsp;yang bertugas melakukan review dari kode yang ditulis oleh &lt;i&gt;driver&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Role ini bisa ditukar kapanpun, sesuai kesepakatan/kemauan pair (*pasangan).&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Berdasarkan pengalaman saya, keuntungan yang didapatkan dengan menerapkan pair programming adalah sebagai berikut :&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Tidak perlu ada code review, karena dalam pair bisa saling melakukan review. Akan tetapi jika ada story yang berkaitan dengan banyak pair, atau &lt;i&gt;issue&lt;/i&gt; yang cukup kompleks, &lt;i&gt;code review &lt;/i&gt;oleh tim besar masih tetap dijalankan.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Melatih komunikasi, khususnya bagi pribadi yang kurang banyak bicara dan introvert seperti saya, menjalankan pair programming = memiliki partner komunikasi setiap bekerja.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Tidak perlu ada training, karena kita bisa langsung terjun dalam pekerjaan dan belajar sambil jalan dari pair kita.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Belajar banyak dari pair.&lt;br /&gt;Pernah suatu waktu dalam sesi &lt;a href=&quot;https://wideangle.com/agile-performance-management-tactic/&quot; target=&quot;_blank&quot;&gt;1 on 1&lt;/a&gt; dengan &lt;i&gt;VP of Engineering&lt;/i&gt;, saya ditanya sudah &quot;diajari&quot; apa saja selama 3 bulan masa percobaan dengan pair. Saya jawab dengan datar saya belum diajari apa-apa. Tapi dalam 1 on 1 tersebut saya diberitahu bahwa &quot;pairing adalah teaching&quot;, dan memang betul. Karena jika dicermati, sebenarnya secara tidak langsung kita diajari oleh pair kita, mulai dari cara berpikir, &lt;i&gt;problem solving&lt;/i&gt;, &lt;i&gt;best practices&lt;/i&gt;, bahkan sampai urusan rumah tangga dan anak (*hehe, maklum pair-pair saya mayoritas sudah berkeluarga).&lt;br /&gt;&lt;br /&gt;Satu kalimat yang paling saya ingat dalam sesi 1 on 1 tersebut adalah, &quot;Being a good pair is a journey&quot;. Ya, menjadi pair yang baik membutuhkan waktu dan usaha, bukan hanya dalam pekerjaan tapi juga dengan &quot;halal pair&quot; nantinya. *Single lagi ngode keras, haha&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Untuk saat ini, beberapa hal di atas adalah manfaat yang sangat saya rasakan selama menjalankan pair programming. Apakah teman-teman mau mencoba mempraktekkannya? Cobain deh&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Mungkin jika teman-teman ada pendapat lain, saya tunggu di comment ya :)&lt;br /&gt;&lt;br /&gt;Terima kasih&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2018/01/xp-pair-programming-di-mata-dummy.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-1410220018006339829</guid><pubDate>Fri, 15 Dec 2017 16:29:00 +0000</pubDate><atom:updated>2017-12-15T23:29:22.589+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Pindahan</category><title>Hisashiburi - Long time no see</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Dear all,&lt;br /&gt;&lt;br /&gt;Sudah lama sekali saya tidak memposting &quot;artikel&quot; di blog ini :P&lt;br /&gt;&lt;br /&gt;Btw, melalui post ini saya&amp;nbsp;ingin&amp;nbsp;menginformasikan bahwa berikutnya blog ini akan beralih fungsi menjadi blog mengenai pengalaman yang saya alami di dunia kerja. Untuk post &lt;i&gt;technical&lt;/i&gt;&amp;nbsp;akan saya pindahkan ke &lt;a href=&quot;https://medium.com/@ekosuhariyadi&quot;&gt;https://medium.com/@ekosuhariyadi&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Sampai bertemu di post selanjutnya.&lt;br /&gt;&lt;br /&gt;Terima kasih :)&lt;br /&gt;&amp;nbsp;&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2017/12/hisashiburi-long-time-no-see.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-7671430050972014330</guid><pubDate>Sun, 08 Jan 2017 02:13:00 +0000</pubDate><atom:updated>2017-01-08T15:47:42.499+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Backup</category><category domain="http://www.blogger.com/atom/ns#">Bash</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">Shell</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Bash | Learning Bash/Shell Scripting The Hard Way</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Meskipun saya sudah menggunakan Sistem Operasi berbasis Linux sejak lebih dari 8 tahun lalu.&lt;br /&gt;
Cukup jarang saya harus berkutat dengan bash/shell scripting/programming, saya hanya sekedar tahu dan tidak pernah belajar lebih dalam.&lt;br /&gt;
&lt;br /&gt;
Tapi karena tuntutan profesi (*haha profesi jare), mau tidak mau saya harus sedikit belajar, dengan bekal script warisan dari &lt;i&gt;SysAdmin&lt;/i&gt; sebelumnya.&lt;br /&gt;
&lt;br /&gt;
Langsung saja studi kasusnya adalah membuat bash script untuk melakukan proses backup database sistem (kami menggunakan PostgreSQL) &amp;nbsp;ke layanan &lt;b&gt;Google Drive&lt;/b&gt; (berikutnya kita sebut &lt;b&gt;gdrive&lt;/b&gt;). Kami mempunyai beberapa database server dan beberapa diantaranya dibatasi hanya bisa diakses dan mengakses via jaringan lokal (private network).&lt;br /&gt;
&lt;br /&gt;
Untuk keperluan komunikasi dengan Google Drive via terminal, saya menggunakan tool bernama &lt;b&gt;drive&lt;/b&gt; yang merupakan project open source dan bisa diakses via&amp;nbsp;&lt;a href=&quot;https://github.com/odeke-em/drive&quot;&gt;https://github.com/odeke-em/drive&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Gambaran untuk prosesnya adalah seperti ini:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Di node backup masih ada file backup yang lama untuk keperluan menghapusnya dari gdrive dan menggantinya dengan file backup baru. Lalu proses backup dilakukan, sehingga akan ada file backup baru dan backup lama di dalam satu folder. Langkah selanjutnya adalah menghapus file backup lama dari gdrive kemudian mengupload file backup yang baru. File backup yang lama kemudian dihapus dari node backup. Dan yang terakhir, untuk menghemat space di node backup, content file backup yang baru akan direset, sebab proses delete dari gdrive kita cukup mengetahui nama filenya saja. &amp;nbsp;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;
Berikut detail langkah yang saya lakukan&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Buat bash script di node yang bertugas untuk menjalankan backup (berikutnya kita sebut node backup), tentunya merupakan node yang bisa mengakses internet untuk keperluan upload ke gdrive&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;backup database postgres dan lakukan kompresi untuk menghemat space (di node backup maupun di gdrive&amp;nbsp;nantinya) dan meringankan proses transfer dari node database ke node backup (meskipun proses ini melalui private network yang tentu jauh lebih cepat dibanding via internet). Perintahnya mudah, tinggal pipe hasil pg_dump ke gzip&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;pg_dump -U[user] [nama database] | gzip &amp;gt; $nama_file&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;selanjutnya adalah melakukan file transfer dari node database (karena nantinya proses backup terjadi di node database bukan di node backup, dan karena saya tidak ingin melakukan backup langsung via jaringan *opsi -h [host database]). Saya menggunakan ftp untuk proses transfernya. Perintahnya adalah&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;ftp -n -v $HOST_NODE_BACKUP &amp;lt;&amp;lt; EOT&lt;br /&gt;ascii&lt;br /&gt;user $USERNAME $PASSWORD&lt;br /&gt;prompt&lt;br /&gt;# lakukan perintah ftp di sini&lt;br /&gt;quit&lt;br /&gt;EOT&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Seperti yang saya tulis di langkah ke-1, bahwa script backup ditulis di node backup, namun akan dijalankan di node database, untuk itu kita bisa menulis perintah&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;cat script_backup_database.sh | ssh [user@node_database]&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Strateginya adalah saya ingin menghapus file backup yang lama dari gdrive&amp;nbsp;dan menggantinya dengan file backup yang baru. Untuk keperluan (drive delete) ini saya perlu tahu nama file backup sebelumnya. Saya mengambil langkah untuk tetap menyimpan file backup yang sudah diupload ke gdrive di node backup, hanya saja saya juga tidak ingin memenuhi space di node backup. Saya hanya perlu tahu nama filenya saja. Jadi ketika proses upload selesai saya mereset content dari file backup dengan perintah&lt;br /&gt;&lt;br /&gt;&lt;b style=&quot;color: blue;&quot;&gt;cat /dev/null &amp;gt; $nama_file_backup&lt;/b&gt;*perintah ini ditulis di baris paling akhir dalam script nantinya&lt;br /&gt;&lt;br /&gt;dengan begitu nantinya saya bisa menghapus file dari gdrive dengan perintah&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: blue; font-weight: bold;&quot;&gt;drive delete -quiet $nama_file_backup_lama&lt;/span&gt;&amp;nbsp; &lt;br /&gt;*pakai opsi &lt;b&gt;-quiet&lt;/b&gt;&amp;nbsp;agar tidak ada prompt Yes/No sebelum menjalan proses &lt;i&gt;aka forcing the process.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ketika proses backup database selesai (sebelum diupload ke gdrive), file backup baru maupun file backup lama masih tetap ada di node backup. Jadi ketika harus melakukan proses upload untuk file baru saja dengan perintah&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;ls -t [filter file] | head -n 2 | xargs drive push -quiet -destination [folder di gdrive] 2&amp;gt;/dev/null&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;*di sini kita bisa belajar kehebatan proses piping (meneruskan output perintah sebelumnya sebagai input ke proses setelahnya) di bash/shell&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ls -t &lt;/b&gt;berfungsi untuk menampilkan list file berurutan mulai dari file terbaru di posisi teratas, tambah filter file yang ingin dilist jika perlu&lt;/li&gt;
&lt;li&gt;&lt;b&gt;head -n 2&lt;/b&gt;&amp;nbsp;bertugas untuk mengambil &lt;b&gt;n&lt;/b&gt; file teratas, dalam kasus ini saya mengambil 2 file teratas (file backup yang terbaru)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;xargs&lt;/b&gt;&amp;nbsp;berfungsi untuk menampung output sebagai argument untuk perintah setelahnya, dalam hal ini,&lt;/li&gt;
&lt;li&gt;&lt;b&gt;drive push -quiet &lt;/b&gt;yang berfungsi untuk mengupload file ke gdrive, dalam kasus ini adalah file yang masuk ke &lt;b&gt;xargs&lt;/b&gt;. Opsi &lt;b&gt;-destination&lt;/b&gt;&amp;nbsp;bisa kita tambahkan jika ingin file diupload ke folder tertentu, bukan pada folder root dari gdrive. Opsi &lt;b&gt;-quiet&lt;/b&gt;&amp;nbsp;sama fungsinya dengan sample &lt;b&gt;drive delete&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2&amp;gt;/dev/null&lt;/b&gt;&amp;nbsp;berfungsi untuk meredirect error output ke /dev/null&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Setelahnya adalah menghapus file backup yang lama, karena sudah tidak diperlukan lagi. Sebab ketika script dijalankan lagi nantinya, file backup yang baru saja diupload akan berubah statusnya menjadi &quot;file backup lama&quot;. Perintah yang dijalankan adalah&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;ls -t [filter file] | tail -n&amp;nbsp;+3 | xargs rm 2&amp;gt;/dev/null&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;tail -n&amp;nbsp;&lt;/b&gt;&lt;b&gt;+3 &lt;/b&gt;adalah kebalikan dari perintah&amp;nbsp;&lt;b&gt;head&lt;/b&gt;, yang mengambil &lt;b&gt;n&lt;/b&gt; file terbawah, jika ditambahkan opsi&amp;nbsp;&lt;b&gt;+&lt;/b&gt;, berarti file terbawah yang diambil dimulai dari index ke-3. Sesuai dengan langkah sebelumnya, file backup terbaru adalah 2 file teratas&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rm&lt;/b&gt;&amp;nbsp;sudah tentunya untuk menghapus file yang ditampung oleh &lt;b&gt;xargs&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Terakhir adalah reset content file backup baru dengan perintah yang sudah saya sebutkan di awal langkah ke-3&lt;/li&gt;
&lt;li&gt;Tambahan, script backup belum masuk dalam cronjob, maka saya harus mengeksekusi script tersebut secara manual. Namun karena koneksi saya tidak stabil dan tidak mau jika nantinya proses backup tidak bisa terpantau jika koneksi saya putus, maka opsi yang ada adalah mengeksekusi bash script ke background proses. Perintahnya adalah&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;nohup file_bash_script.sh &amp;amp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jadi meskipun koneksi bash/terminal saya putus atau saya logout dari bash sekalipun, proses backup akan tetap berjalan. Sehingga ketika login kembali, saya masih bisa memantau proses backup.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Semoga bermanfaat&lt;br /&gt;
Then it&#39;s time to take good sleep now ^_^!&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Memasukan file script ke cronjob&lt;/li&gt;
&lt;li&gt;Menambahkan strategi checksum agar kita bisa melakukan kroscek apakah file yang terupload di gdrive sudah valid atau belum&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2017/01/bash-learning-bashshell-scripting-hard.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-6018505124084334232</guid><pubDate>Wed, 14 Dec 2016 14:56:00 +0000</pubDate><atom:updated>2016-12-14T21:56:38.506+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">Query</category><category domain="http://www.blogger.com/atom/ns#">SQL</category><title>PostgreSQL | Query Select Dengan Tuple Sebagai Kondisi di Where Clause </title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Salam SQL ^_^)!&lt;br /&gt;
&lt;br /&gt;
Kali ini saya&amp;nbsp;mau berbagi pengalaman untuk menggunakan tuple dalam query (kondisi di &lt;i&gt;&lt;b&gt;WHERE&lt;/b&gt;&amp;nbsp;clause&lt;/i&gt;).&lt;br /&gt;
&lt;br /&gt;
Beberapa minggu yang lalu saya&amp;nbsp;harus melakukan cek data, dimana saya membuat query yang membutuhkan beberapa kombinasi kondisi yang harus dipenuhi. Jika menggunakan operator logical biasa, eg:&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;b&gt;WHERE column1=value1 AND column2=value2 AND column3=value3&lt;/b&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
saya mengalami kesulitan apabila &lt;b&gt;value1..3&lt;/b&gt; tersebut terdiri dari beberapa row yang merupakan hasil subquery dalam clause &lt;b&gt;IN&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Setelah googling ternyata clause &lt;i&gt;WHERE&lt;/i&gt;&lt;b style=&quot;font-style: italic;&quot;&gt;&amp;nbsp;&lt;/b&gt;sudah mendukung penggunaan tuple, jadi query yang saya buat menjadi&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;b&gt;WHERE (column1, column2, column3)
 IN (SELECT value1, value2, value3 FROM ...)&lt;/b&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Wah, saya baru tahu hahaha ^_^)!&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/12/postgresql-query-select-dengan-tuple.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-4454841727189329451</guid><pubDate>Wed, 14 Dec 2016 14:41:00 +0000</pubDate><atom:updated>2016-12-15T08:16:32.445+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Debugging</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">SSH</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Bash | Solusi &quot;Warning: remote port forwarding failed for listen port 9000&quot;</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Halo Sobat, mohon maaf saya cukup lama hiatus di blog ini. *sok pakai kata hiatus :P&lt;br /&gt;
&lt;br /&gt;
Langsung saja saya mau share pengalaman melakukan remote debugging PHP melalui ssh tunnel di port 9000 (standar port xdebug, yap saya menggunakan xdebug untuk debugging aplikasi PHP).&lt;br /&gt;
&lt;br /&gt;
Dengan ssh tunnel kita bisa menforward port 9000 dari server yang ada di cloud ke port 9000 di komputer lokal kita, sehingga kita bisa mendebug aplikasi di server melalui IDE/tool debug di komputer lokal. (Saya penyuka PHPStorm, &lt;i&gt;please no IDE war here&lt;/i&gt; haha).&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Namun karena internet yang saya pakai tidak stabil sehingga seringkali ssh tunnel ini freeze di bash window, sehingga saya harus menutup paksa window tersebut. Akibatnya di sisi server, port forwarding masih aktif, jadi ketika saya melakukan tunneling lagi maka akan muncul warning&amp;nbsp;&lt;b&gt;remote port forwarding failed for listen port 9000.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Solusinya adalah kita harus meng-kill proses &lt;b&gt;&lt;i&gt;port forwarding&lt;/i&gt;&lt;/b&gt; tsb via ssh ke server dengan menjalankan perintah&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;lsof | grep 9000&lt;/code&gt;&lt;/pre&gt;
, maka akan muncul list proses, kemudian jalankan&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;kill &amp;lt;pid proses&amp;gt;&lt;/code&gt;&lt;/pre&gt;
untuk mematikan proses&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Setelah selesai maka kita bisa melakukan port forwarding 9000 via ssh tunnel kembali.&lt;br /&gt;
&lt;br /&gt;
referensi:&amp;nbsp;&lt;a href=&quot;https://gist.github.com/travist/2562314&quot;&gt;https://gist.github.com/travist/2562314&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/12/bash-solusi-warning-remote-port.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-8454106944961847136</guid><pubDate>Sun, 26 Jun 2016 09:22:00 +0000</pubDate><atom:updated>2016-06-29T13:21:27.898+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Hardware</category><category domain="http://www.blogger.com/atom/ns#">HDD Caddy</category><category domain="http://www.blogger.com/atom/ns#">SSD</category><title>Hardware | Banyak Bersyukur dengan SSD</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Seperti yang sudah saya sampaikan pada &lt;a href=&quot;http://javanatics.blogspot.com/2016/03/what-i-dont-like-about-mac-os-x.html&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt; sebelumnya, kali ini saya mau membahas upgrade laptop saya ke &lt;a href=&quot;https://en.wikipedia.org/wiki/Solid-state_drive&quot; target=&quot;_blank&quot;&gt;SSD&lt;/a&gt; sebagai &lt;i&gt;&quot;main&quot; hard drive&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Saya sudah cukup banyak mendengar mengenai hebatnya kecepatan yang ditawarkan SSD, namun belum mempunyai keinginan untuk upgrade karena ketidaktahuan saya bahwa ada cara untuk memasang SSD ke laptop secara mandiri (*Saya beralih dari PC ke laptop karena adik saya membutuhkan PC saya). Beruntung saya mengikuti feed dari &lt;a href=&quot;http://vatih.com/ssd-mengajarkan-saya-untuk-lebih-bersyukur/&quot; target=&quot;_blank&quot;&gt;blog Mas Vatih&lt;/a&gt; dan menemukan satu artikel menarik mengenai cara memasang SSD di Macbook miliknya.&lt;br /&gt;
&lt;br /&gt;
Berbekal info dari post tersebut dan uang tabungan yang cukup, saya memutuskan untuk mencobanya.&lt;br /&gt;
Saya membeli SSD Crucial MX200 250GB dan HDD Caddy SATA 12.7mm dari JakartaNotebook.com *bukan iklan. &lt;br /&gt;
Bagi yang belum tahu, HDD Caddy adalah suatu alat yang digunakan untuk memasang hard drive pada slot DVD ROM.&lt;br /&gt;
Berikut penampakan HDD Caddy&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2dZNcRo-SDz5zjFvyWMf9M5ccqakBWxsHGLRWQgSMh-VQKT-i-MrlUjquAkvAeRqWOHUthMVj_NfAiNrkfqPLGZcr0XV32-kpUnCiyQnq_H5dmZ7OCN9-g-pwuhs20qFYMMcWnWktYvNY/s1600/universal-2nd-hard-disk-drive-caddy-for-laptop-127mm-sata-to-sata3-4.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2dZNcRo-SDz5zjFvyWMf9M5ccqakBWxsHGLRWQgSMh-VQKT-i-MrlUjquAkvAeRqWOHUthMVj_NfAiNrkfqPLGZcr0XV32-kpUnCiyQnq_H5dmZ7OCN9-g-pwuhs20qFYMMcWnWktYvNY/s400/universal-2nd-hard-disk-drive-caddy-for-laptop-127mm-sata-to-sata3-4.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;HDD Caddy 12.7mm *mirip DVD ROM kan ^^&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Perlu diketahui juga bahwa HDD Caddy mempunyai 2 ukuran ketebalan yakni 9.5mm dan 12.7mm, yakni sama dengan ketebalan DVD ROM pada laptop. Jadi sebelum membeli, pastikan kita sudah mengetahui ukuran DVD ROM dari laptop kita.&lt;br /&gt;
&lt;br /&gt;
Untuk proses pemasangan cukup mudah, tergantung dari laptop anda, yakni dengan melepas DVD ROM. Saya sudah &quot;tidak membutuhkankan&quot; DVD ROM yang hampir tidak pernah digunakan, jadi apabila sahabat masih membutuhkan DVD ROM, silahkan dipikirkan sebelum memutuskan untuk menggantinya dengan HDD Caddy.&lt;br /&gt;
Cara melepas DVD ROM sangat bergantung dari model/merk laptop kita, jadi silahkan googling ya hehe ^^.&lt;br /&gt;
&lt;br /&gt;
Selanjutnya adalah pasang SSD pada HDD Caddy, jangan lupa untuk memasang bautnya dengan benar. Berikutnya adalah kita tinggal memasang HDD Caddy pada slot DVD ROM.&lt;br /&gt;
Booting laptop dan voila, seharusnya BIOS sudah bisa mendeteksi SSD yang terpasang.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
Entah kenapa SSD pada HDD Caddy tidak bisa dijadikan sebagai boot hard drive, tapi karena saya menggunakan Ubuntu, saya bisa mensetting agar grub meload OS dari SSD.&lt;br /&gt;
Sejauh ini saya puas dengan performa dari SSD baik itu dari sisi booting time maupun compile time ketika coding.&lt;br /&gt;
&lt;br /&gt;
Programmer memang tidak jago dalam benerin komputer, tapi tidak ada salahnya untuk belajar.&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/06/hardware-banyak-bersyukur-dengan-ssd.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2dZNcRo-SDz5zjFvyWMf9M5ccqakBWxsHGLRWQgSMh-VQKT-i-MrlUjquAkvAeRqWOHUthMVj_NfAiNrkfqPLGZcr0XV32-kpUnCiyQnq_H5dmZ7OCN9-g-pwuhs20qFYMMcWnWktYvNY/s72-c/universal-2nd-hard-disk-drive-caddy-for-laptop-127mm-sata-to-sata3-4.JPG" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-6072251382477279459</guid><pubDate>Sun, 24 Apr 2016 13:45:00 +0000</pubDate><atom:updated>2016-04-24T20:45:49.001+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">JVM Language</category><category domain="http://www.blogger.com/atom/ns#">Kotlin</category><category domain="http://www.blogger.com/atom/ns#">String</category><title>Kotlin | kotlin.String steroid untuk java.lang.String</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
Sama seperti String di Java, Kotlin String adalah obyek immutable yang berarti sekali diinisialisasi, valuenya tidak akan bisa diubah. Jika dilakukan assignment value baru, yang sebenarnya terjadi adalah JVM akan membuat obyek String baru dengan value yang diassign.&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;background-color: #e4e4ff;&quot;&gt;String&lt;/span&gt; kode = &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;Sebenarnya hubungan kita ini apa sih?&quot;&lt;/span&gt;;
&lt;span style=&quot;color: grey; font-style: italic;&quot;&gt;// misalkan object di memory adalah ABC&lt;/span&gt;&lt;span style=&quot;color: grey; font-style: italic;&quot;&gt;
&lt;/span&gt;kode = &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;Oke, besok aku datang ke Ayah kamu&quot;&lt;/span&gt;;
&lt;span style=&quot;color: grey; font-style: italic;&quot;&gt;// object yang ada di memory saat ini adalah XYZ&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Seperti halnya dengan Java, String literal di Kotlin juga dimulai dengan tanda petik ganda (&quot;).&lt;br /&gt;
Hanya saja class String di Kotlin memeliki beberapa kelebihan dibanding String di Java.&lt;br /&gt;
Diantaranya:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Setiap element character dari string bisa diakses dengan array syntax&lt;br /&gt;eg: kode[index], sedangkan di Java kode.charAt(index)&lt;br /&gt;&lt;br /&gt;Untuk iterasi tiap element&lt;br /&gt;&lt;br /&gt;Java&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;for &lt;/span&gt;(&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;char &lt;/span&gt;c : kode.toCharArray()) {
    System.&lt;span style=&quot;color: #660e7a; font-style: italic; font-weight: bold;&quot;&gt;out&lt;/span&gt;.println(c);
}&lt;/pre&gt;
&lt;br /&gt;Kotlin&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;for &lt;/span&gt;(c &lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;in &lt;/span&gt;kode) {
    &lt;span style=&quot;font-style: italic;&quot;&gt;println&lt;/span&gt;(c)
}

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;String template, yakni dalam string literal bisa disisipkan kode untuk dievaluasi nilainya.&lt;br /&gt;Di Scala ada fitur yang serupa bernama&amp;nbsp;String interpolation.&lt;br /&gt;&lt;br /&gt;Jika di Java kita biasa menulis seperti ini&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;System.&lt;span style=&quot;color: #660e7a; font-style: italic; font-weight: bold;&quot;&gt;out&lt;/span&gt;.println(
        String.&lt;span style=&quot;font-style: italic;&quot;&gt;format&lt;/span&gt;(&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;Panjang karakter dari (%s) adalah %d&quot;&lt;/span&gt;,
                kode, kode.length()));&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Di Kotlin kita bisa menulis seperti ini&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;Panjang karakter dari (&lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;$&lt;/span&gt;kode)&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt; adalah &lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;${&lt;/span&gt;kode.&lt;span style=&quot;color: #660e7a; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;&lt;/span&gt;)

&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Multiline String literal,&lt;br /&gt;Bagi kita yang biasa menulis string panjang seperti query mungkin agak kurang nyaman &lt;br /&gt;dengan tidak adanya fitur multiline string di Java, padahal sudah banyak request masuk untuk menyediakan fitur ini.&lt;br /&gt;&lt;br /&gt;Java&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;System.&lt;span style=&quot;color: #660e7a; font-style: italic; font-weight: bold;&quot;&gt;out&lt;/span&gt;.println(&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;SELECT &#39;&quot; &lt;/span&gt;+ kode + &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;&#39;, &#39;&quot; &lt;/span&gt;+ kode.length() + &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;&#39;&quot; &lt;/span&gt;+
        &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot; FROM tablename&quot; &lt;/span&gt;+
        &lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot; WHERE blabla&quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;br /&gt;Kotlin&lt;br /&gt;&lt;pre style=&quot;background-color: white; font-family: &#39;DejaVu Sans Mono&#39;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;&quot;&quot;SELECT &#39;&lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;$&lt;/span&gt;kode&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&#39;, &#39;&lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;${&lt;/span&gt;kode.&lt;span style=&quot;color: #660e7a; font-weight: bold;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: navy; font-weight: bold;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&#39; 
&lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;FROM tablename 
&lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;WHERE blabla&lt;/span&gt;&lt;span style=&quot;color: green; font-weight: bold;&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/04/kotlin-kotlinstring-steroid-untuk.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-5066653856729913013</guid><pubDate>Wed, 20 Apr 2016 11:21:00 +0000</pubDate><atom:updated>2016-06-26T18:29:48.536+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Personal</category><title>I&#39;m not that fanatic anymore ^^!</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Haiiii *&lt;i&gt;impersonate&lt;/i&gt; cara Takeru Satoh mengucapkan hai (iya dalam bahasa Jepang) di dorama Emperor&#39;s Cook :P&lt;br /&gt;
&lt;br /&gt;
Yak, sesuai judul post kali ini, saya sudah tidak sefanatik dulu terhadap bahasa pemrograman yang saya gunakan, yakni Java. Semua berawal ketika saya mengenal &lt;i&gt;JVM language&lt;/i&gt;&amp;nbsp;lain&amp;nbsp;(bahasa pemrograman yang berjalan di &lt;i&gt;Java Virtual Machine&lt;/i&gt;) seperti :&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.groovy-lang.org/&quot; target=&quot;_blank&quot;&gt;Groovy&lt;/a&gt; yang mengusung &lt;i&gt;Dynamic Typing&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Bagi programmer &lt;i&gt;dynamic type&lt;/i&gt; seperti PHP mungkin akan merasa familiar dengan Groovy, karena kita tidak perlu mendeklarasikan tipe data pada variable. Saya sempat jatuh cinta pada bahasa ini, namun saya masih merasakan keamanan &quot;bermain&quot; OOP dengan &lt;i&gt;static type.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scala-lang.org/&quot; target=&quot;_blank&quot;&gt;Scala&lt;/a&gt; dengan konsep &lt;i&gt;Functional OOP (Object Oriented Programming)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Bahasa ini membuka wawasan saya bahwa diluar pemrograman struktural dan berbasis object (imperative), pernah ada bahasa yang mengusung konsep &lt;i&gt;functional&lt;/i&gt;&amp;nbsp;dan belakangan ini mulai muncul lagi ke permukaan dan bahkan banyak menyedot perhatian para developer&lt;i&gt;.&lt;/i&gt;&lt;br /&gt;Functional programming memakai konsep persamaan fungsi dalam matematika &lt;b&gt;x = f(y)&lt;/b&gt;. &lt;br /&gt;Jika pada paradigma imperative (OOP) jika menulis bagaimana cara melakukan sesuatu, pada paradigma functional kita menulis apa yang harus dilakukan (deklaratif)&lt;br /&gt;&lt;br /&gt;Sebagai contoh untuk memfilter sebuah arraylist dari Person yang usianya &amp;lt;= 30 tahun&lt;br /&gt;&lt;br /&gt;Imperative&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;List&amp;lt;Person&amp;gt; personList = ...
List&amp;lt;Person&amp;gt; tigaPuluhanPersonList = new ArrayList&amp;lt;&amp;gt;();
&lt;b&gt;for(Person person : personList)&lt;/b&gt;{
&amp;nbsp; &amp;nbsp; &lt;b&gt;if (person.age &amp;lt;= 30)&lt;/b&gt; {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tigaPuluhanPersonList.add(person); &amp;nbsp; 
&amp;nbsp; &amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Functional&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;List&amp;lt;Person&amp;gt; personList = ...
List&amp;lt;Person&amp;gt; tigaPuluhanPersonList = 
    personList.&lt;b&gt;filter&lt;/b&gt;(person -&amp;gt; person.age &amp;lt;= 30);&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Scala menggabungkan kedua konsep ini, yakni OOP dengan static type dan functional sehingga kita bisa memanfaatkan kekuatan OOP dan kemudahan Functional, awesome.&lt;br /&gt;Hanya saja Scala dibangun oleh kalangan akademisi yakni &lt;a href=&quot;https://en.wikipedia.org/wiki/Martin_Odersky&quot; target=&quot;_blank&quot;&gt;Martin Odersky&lt;/a&gt;&amp;nbsp;dari EFPL Swiss,&lt;br /&gt;beberapa konsepnya dan syntaxnya agak susah dipahami oleh kalangan non akademisi seperti saya.&lt;br /&gt;Selain itu, integrasi dengan &lt;i&gt;existing library&lt;/i&gt; yang ditulis dengan bahasa Java agak merepotkan.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ceylon-lang.org/&quot; target=&quot;_blank&quot;&gt;Ceylon&lt;/a&gt; yang dibangun oleh &lt;a href=&quot;http://ceylon-lang.org/blog/authors/gavin-king/&quot; target=&quot;_blank&quot;&gt;Gavin King&lt;/a&gt;, sang developer Hibernate ORM yang terkenal itu&lt;br /&gt;&lt;br /&gt;Saya tidak akan membahasnya karena gaung dari bahasa ini tidak seperti Scala maupun 2 bahasa berikut.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://clojure.org/&quot; target=&quot;_blank&quot;&gt;Clojure&lt;/a&gt; yang membawa Lisp ke ranah JVM&lt;br /&gt;&lt;br /&gt;Yap Clojure adalah bahasa pemrograman yang memakai dialek dari bahasa Lisp.&lt;br /&gt;Sepengetahuan saya, Clojure cukup populer di kalangan developer yang butuh mengolah data secara significant.&lt;/li&gt;
&lt;li&gt;Dan yang paling baru adalah &lt;a href=&quot;http://kotlinlang.org/&quot; target=&quot;_blank&quot;&gt;Kotlin&lt;/a&gt; yang secara konsep mirip Scala&lt;br /&gt;&lt;br /&gt;Meskipun&amp;nbsp;sama-sama&amp;nbsp;mengusung konsep Functional OOP, Kotlin dirancang dan diclaim oleh Jetbrains&amp;nbsp;(Perusahaan di balik IDE populer Intellij IDEA) sebagai bahasa yang &lt;i&gt;industrial ready&lt;/i&gt;&amp;nbsp;(mendukung dengan baik &lt;i&gt;exisisting library &lt;/i&gt;yang ditulis dengan bahasa Java).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I&#39;m fall in love with this language at first code&lt;/i&gt;&amp;nbsp;^ ^)&lt;br /&gt;&lt;br /&gt;Secara syntax masih relatif dekat dengan Java (as programming language), namun jauh mengurangi boilerplate code jika kita menggunakan bahasa Java.&lt;br /&gt;&lt;br /&gt;sebagai contoh adalah type inference (compiler secara otomatis menentukan tipe data dari variable yang dideklarasikan)&lt;br /&gt;&lt;br /&gt;jika kita biasa mendeklarasikan variable dengan cara&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;String nama = &quot;Eko Suhariyadi&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;menjadi&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;val nama = &quot;Eko Suhariyadi&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
Yap, baik pada Groovy, Scala, maupun Kotlin semicolon adalah optional.&lt;br /&gt;
No more compile error caused by missing semicolon :P&lt;br /&gt;
FYI pada functional programming sangat dianjurkan agar variable di buat &lt;i&gt;immutable&lt;/i&gt;&lt;br /&gt;
(sekali diinisialiasi tidak bisa diassign dengan value lain), karena lebih aman di sisi concurrency.&lt;br /&gt;
&lt;br /&gt;
Contoh lain adalah lambda expression seperti yang bisa dilakukan dengan Java 8.&lt;br /&gt;
Lihat post saya sebelumnya tentang &lt;a href=&quot;http://javanatics.blogspot.co.id/2016/04/java-retrolambda-coding-dengan-java-8.html#.VxcbqlZ970o&quot; target=&quot;_blank&quot;&gt;retrolambda&lt;/a&gt;.&lt;br /&gt;
Saya lebih suka menggunakan Kotlin untuk mendevelop aplikasi berbasis Android.&lt;br /&gt;
Tapi tidak menutup kemungkinan saya akan menggunakan Kotlin di aplikasi lain.

&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sedangkan bahasa di luar JVM yang saya pakai adalah PHP (yang dulu saya benci) dan Python.&lt;br /&gt;
Perkembangan teknologi yang cepat menuntut kita untuk belajar bahasa baru, sesuai dengan kebutuhan &quot;pasar&quot;.&lt;br /&gt;
&lt;br /&gt;
Semangat belajar Sob :)&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/04/im-not-that-fanatic-anymore.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-3154902017327998736</guid><pubDate>Sat, 16 Apr 2016 15:08:00 +0000</pubDate><atom:updated>2016-04-16T22:12:26.634+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Java 8</category><category domain="http://www.blogger.com/atom/ns#">Lambda Expression</category><title>Java | Retrolambda, Coding dengan Java 8 untuk Java 5, 6, 7</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Seperti yang kita ketahui bahwa versi paling akhir untuk saat ini dari Java adalah Java 8.&lt;br /&gt;
Pada Java (sebagai bahasa pemrograman) 8 terdapat cukup banyak fitur baru yang memudahkan hidup kita sebagai programmer, terutama untuk mengurangi &lt;i&gt;verbosity&lt;/i&gt;/&lt;i&gt;boilerplate&lt;/i&gt; dari &lt;i&gt;code&lt;/i&gt; yang kita tulis. Fitur-fitur tersebut antara lain adalah &lt;b style=&quot;font-style: italic;&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Anonymous_function&quot; target=&quot;_blank&quot;&gt;lambda expressions&lt;/a&gt;, &lt;a href=&quot;https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html&quot; target=&quot;_blank&quot;&gt;method reference&lt;/a&gt;, &lt;/b&gt;dan&lt;b style=&quot;font-style: italic;&quot;&gt; &lt;a href=&quot;https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html&quot; target=&quot;_blank&quot;&gt;try with resources&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;i&gt;Lambda expressions &lt;/i&gt;(fitur ini dirilis mulai java 8)&lt;br /&gt;&lt;br /&gt;Sebagai contoh di swing, apabila kita menambahkan actionlistener pada button adalah sebagai berikut&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;clickButton.addActionListener(new ActionListener() {

&amp;nbsp; &amp;nbsp;&amp;nbsp;@Override
&amp;nbsp; &amp;nbsp; public void actionPerformed(ActionEvent event) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.out.println(event);
&amp;nbsp; &amp;nbsp; }
});&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;terlihat bahwa koding yang kita tulis cukup banyak (&lt;i&gt;verbose&lt;/i&gt;), namun dengan &lt;i&gt;lambda expressions&lt;/i&gt;&amp;nbsp;kita cukup menuliskan&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;clickButton.addActionListener((ActionEvent event) -&amp;gt; {
&amp;nbsp; &amp;nbsp; System.out.println(event);
});&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;atau bahkan&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;clickButton.addActionListener(event -&amp;gt; {
&amp;nbsp; &amp;nbsp; System.out.println(event);
});&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;li&gt;&lt;i&gt;Method reference&amp;nbsp;&lt;/i&gt;(fitur ini dirilis mulai java 8)&lt;br /&gt;&lt;br /&gt;Sebenarnya &lt;i&gt;method reference&lt;/i&gt;&amp;nbsp;merupakan penyederhaan dari&amp;nbsp;&lt;i&gt;lambda expressions&lt;/i&gt;&amp;nbsp;jika anonymous object/method tersebut memanggil method yang sudah ada.&lt;br /&gt;&lt;br /&gt;Dalam contoh kasus clickButton di atas, &lt;i&gt;lambda expressions&lt;/i&gt; bisa kita sederhanakan dengan &lt;i&gt;method reference.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;clickButton.addActionListener(System.out::println);&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;note: parameter dari method action performed akan di&lt;i&gt;passing&lt;/i&gt;&amp;nbsp;sebagai parameter method &lt;pre&gt;&lt;code&gt;println&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;, ajaib bukan? :)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Try with resources&lt;/i&gt;&amp;nbsp;(fitur ini dirilis mulai java 7)&lt;br /&gt;&lt;br /&gt;Fitur ini memudahkan kita untuk mengakses resources yang butuh di&lt;i&gt;close&lt;/i&gt;&amp;nbsp;setelah selesai digunakan. eg: read file, data cursor untuk jdbc, etc&lt;br /&gt;&lt;br /&gt;Sebelum Java 7, kita harus menulis koding berikut untuk mengakses file&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;String readFirstlineFromFile(String path) throws IOException {
&amp;nbsp; &amp;nbsp; BufferedReader reader = new BufferedReader(new FileReader(path));

&amp;nbsp; &amp;nbsp; try {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return reader.readLine();
&amp;nbsp; &amp;nbsp; } finally {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (reader != null) reader.close();
&amp;nbsp; &amp;nbsp; }

}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Dengan &lt;i&gt;try with resources&lt;/i&gt;&amp;nbsp;kita cukup menulis&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;String readFirstlineFromFile(String path) throws IOException {
&amp;nbsp; &amp;nbsp; try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return reader.readLine();
&amp;nbsp; &amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lalu kenapa kita tidak melakukan migrasi agar aplikasi berjalan di JVM 8 saja?&lt;br /&gt;
Bisa jadi kita ingin mengadopsi fitur Java 8 tersebut untuk &lt;i&gt;existing app&lt;/i&gt; tapi tidak memungkinkan karena sudah dipakai di banyak customer, yang jika dilakukan migrasi membutuhkan ongkos yang besar.&lt;br /&gt;
&lt;br /&gt;
ataupun untuk programmer Android yang ingin mengadopsi fitur Java 8, namun karena Android belum mendukung Java 8 dan kemungkinan akan butuh waktu sebelum Google merilis dukungan Android untuk Java 8.&lt;br /&gt;
&lt;br /&gt;
Dengan &lt;a href=&quot;https://github.com/orfjackal/retrolambda&quot; target=&quot;_blank&quot;&gt;retrolambda&lt;/a&gt; kebutuhan ini bisa dipenuhi, karena kita bisa koding dengan Java 8 namun hasilnya bisa dieksekusi dengan versi Java (JVM) di bawahnya. Retrolamba akan memodifikasi &lt;i&gt;bytecode&lt;/i&gt;&amp;nbsp;hasil kompilasi Java 8 agar bisa dieksekusi di Java 5, 6, 7.&lt;br /&gt;
&lt;br /&gt;
Sebagai informasi tambahan, saat ini retrolambda baru mendukung 3 fitur tersebut di atas.&lt;br /&gt;
Belum ada dukungan untuk Stream API dan beberapa fitur Java 8 lainnya.&lt;br /&gt;
&lt;br /&gt;
Cara untuk integrasi ke &lt;i&gt;existing project&lt;/i&gt;&amp;nbsp;sangat mudah, karena retrolambda memiliki plugin untuk maven, gradle, maupun kompilasi manual.&lt;br /&gt;
&lt;br /&gt;
May lambda be with you :D&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/04/java-retrolambda-coding-dengan-java-8.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-6597388652167740487</guid><pubDate>Sat, 26 Mar 2016 00:08:00 +0000</pubDate><atom:updated>2016-03-26T21:16:54.619+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Mac OSX</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title> What i don&#39;t like about Mac OS X</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
Bagi pengguna &quot;fanatik&quot; Mac OSX mungkin judul post kali ini agak mengganggu, tapi ini pengalaman yang saya rasakan sebagai &quot;pengguna baru&quot;.&lt;br /&gt;
&lt;br /&gt;
Jadi 2 hari kemarin saya sudah mulai aktif kembali di kantor,&lt;br /&gt;
yang mana sebelumnya saya bekerja secara remote dikarenakan alasan kesehatan.&lt;br /&gt;
Namun ujian datang ketika saya ingin mulai aktif di kantor.&lt;br /&gt;
Pagi hari sebelum berangkat, laptop saya tidak bisa booting, yang ternyata penyebabnya adalah harddisk utama tidak terbaca oleh sistem, alhasil laptop yang sudah menemani saya selama hampir 4 tahun ini harus &quot;dirumah sakitkan&quot;.&lt;br /&gt;
Saya kontak rekan kantor untuk mengabarkan bahwa saya harus ke service center terlebih dahulu sebelum &quot;ngantor&quot;.&lt;br /&gt;
&lt;br /&gt;
Di kantor tidak ada lagi komputer/laptop yang bisa saya gunakan, sehingga saya pun &quot;terpaksa&quot; memakai MacMini second hand yang dimiliki kantor. &lt;br /&gt;
Perjuangan dimulai dari sini, karena saya harus mensetup environment yang sama dengan yang saya gunakan di laptop.&lt;br /&gt;
Sebagai programmer yang terbiasa bekerja dengan workstation berbasis &lt;a href=&quot;http://www.ubuntu.com/&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt; selama hampir 8 tahun, memang secara UI/UX Mac OS X sangat memukau, namun secara sistem saya sangat menyukai Ubuntu/Debian dengan package managernya. &lt;br /&gt;
Di Ubuntu untuk menginstall aplikasi yang saya butuhkan cukup dengan mengetik &lt;br /&gt;
&lt;pre&gt;&lt;code&gt;apt-get install xxx&lt;/code&gt;&lt;/pre&gt;
(done, aplikasi siap dipakai).&lt;br /&gt;
Sedangkan di Mac saya harus mencari installer manual.&lt;br /&gt;
Meskipun di Mac ada &lt;a href=&quot;http://brew.sh/&quot; target=&quot;_blank&quot;&gt;homebrew/brew&lt;/a&gt; untuk menghandle keperluan ini, tetap saja ada kesulitan bagi saya untuk mengatur konfigurasi dari aplikasi, mengecek apakah service sudah jalan atau belum (saya menginstall &lt;b&gt;nginx&lt;/b&gt; (dibaca engine X, bukan ngings, hehe) dan &lt;b&gt;php7&lt;/b&gt;).&lt;br /&gt;
Setelah &quot;rambut saya keriting&quot; dan utak-atik sana sini, duo combi ini masih belum bisa berjalan dengan baik. Padahal di Ubuntu, setelah apt-get install dan beberapa utak-utik, duo combi sudah bisa berjalan dengan baik.&lt;br /&gt;
&lt;br /&gt;
Saya pun memutuskan untuk menggunakan &lt;a href=&quot;https://www.vagrantup.com/&quot; target=&quot;_blank&quot;&gt;Vagrant&lt;/a&gt; saja.&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre&gt;&lt;code&gt;Vagrant adalah sistem yang menggunakan virtual host&amp;nbsp;
untuk memfasilitasi environtment development.&amp;nbsp;
Semua kebutuhan development (eg: server, database, etc *kecuali IDE)&amp;nbsp;
akan diinstall di virtual host ini, dan dihubungkan dengan komputer/laptop host.&amp;nbsp;
Dengan Vagrant setiap programmer bisa memiliki lingkungan kerja yang sama&amp;nbsp;
(memiliki spec yang sama dengan komputer production),
jadi tidak ada lagi penyataan, 
&quot;Aplikasi sudah jalan di komputer saya&quot; :D
InsyaAllah saya akan membahas Vagrant di post lain.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
Selain packager manager, saya juga tidak menyukai window management dari Mac OSX, khususnya untuk &quot;fullscreen window&quot;.&lt;br /&gt;
Setidaknya inilah yang saya rasakan sebagai pengguna baru Mac OSX selama 2 hari kemarin.&lt;br /&gt;
Bagi pengguna senior Mac OSX, tolong jangan bully saya, saya masih nyubi kakak :D&lt;br /&gt;
&lt;br /&gt;
*Laptop saya sudah selesai diservice selama 2 hari, namun dengan penggantian harddisk baru (bye-bye 4 years of data T_T, mulai dari mp3, mkv, ebook halal dan ebook &quot;haram&quot; *&lt;u&gt;baca: bajakan&lt;/u&gt; :D)&lt;br /&gt;
&lt;br /&gt;
*Alhamdulillah saya sudah menyimpan project terbaru saya di harddisk ke-2 di laptop. FYI, saya memodif laptop dengan mengorbankan slot CD/DVD-ROM untuk dipasangi hdd ke-2 dengan menggunakan hdd caddy, yang mungkin akan saya bahas di post lain.&lt;br /&gt;
&lt;br /&gt;
* Tampilan backcover laptop saya, tolong jangan perhatikan stikernya :D&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0v7BH6cCIh5am4vanctbc1MWJVX6n1vPqBHufikIDnGCWkWExRK_0ONTtTh7BahmJC72QjmWTVl0RCcRXWu5ObxsGKT27kmCv7mKLwv5RQPqRO2F7O1OOsJQvXz1ADXLhhziXafbMrtl3/s1600/ekosuhariyad_notebook.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0v7BH6cCIh5am4vanctbc1MWJVX6n1vPqBHufikIDnGCWkWExRK_0ONTtTh7BahmJC72QjmWTVl0RCcRXWu5ObxsGKT27kmCv7mKLwv5RQPqRO2F7O1OOsJQvXz1ADXLhhziXafbMrtl3/s320/ekosuhariyad_notebook.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2016/03/what-i-dont-like-about-mac-os-x.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0v7BH6cCIh5am4vanctbc1MWJVX6n1vPqBHufikIDnGCWkWExRK_0ONTtTh7BahmJC72QjmWTVl0RCcRXWu5ObxsGKT27kmCv7mKLwv5RQPqRO2F7O1OOsJQvXz1ADXLhhziXafbMrtl3/s72-c/ekosuhariyad_notebook.png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-6465977485822921084</guid><pubDate>Thu, 10 Mar 2016 14:41:00 +0000</pubDate><atom:updated>2016-03-11T18:58:12.397+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MySQL</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu 14.04</category><title>MySQL | Catatan Pengingat</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Saya sangat jarang menggunakan MySQL, karena saya lebih menyukai &lt;a href=&quot;http://www.postgresql.org/&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt; untuk development. Saya intensif menggunakan MySQL di semester ke-2, karena ada mata kuliah database (database model design dan querying) yang mana saat itu menggunakan Oracle. &lt;br /&gt;
Dikarenakan komputer saya saat itu speknya minim (komputer bekas yang saya beli dari teman kuliah seharga 350ribu rupiah, lengkap), maka saya hanya bisa menginstall &lt;a href=&quot;https://www.mysql.com/&quot; target=&quot;_blank&quot;&gt;MySQL&lt;/a&gt; untuk belajar, yang mana saat itu versinya belum mensupport subquery, sehingga saya harus banyak membuat view sebagai alternatif subquery.&lt;br /&gt;
&lt;br /&gt;
Belakangan saya mulai melirik lagi MySQL, namun hanya untuk tujuan belajar.&lt;br /&gt;
Berikut catatan atas problem yang saya hadapi, sebagai catatan pengingat jika nanti saya lupa&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Lupa password user root&lt;br /&gt;&lt;br /&gt;Hari ini saya kelupaan password user root dari MySQL, karena sudah cukup lama tidak tersentuh. Hasil googling mengarahkan saya ke laman &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html&quot; target=&quot;_blank&quot;&gt;ini&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(workstation saya adalah Ubuntu 14.04)&lt;br /&gt;Langkah pertama adalah stop mysql service&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo service mysql stop&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;Berikutnya adalah start service mysql dengan opsi --skip-grant-tables&lt;br /&gt;yang berguna untuk mendisable authentikasi untuk mengakses mysql prompt.&lt;br /&gt;Di PostgreSQL ini sama dengan mengeset authentikasi user postgres menjadi trust.&lt;br /&gt;Saya mencoba mengedit script di /etc/init.d/mysql, namun ketika start, opsi tersebut tidak berjalan, sehingga saya harus menstart mysql server dengan command&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo&amp;nbsp;mysqld_safe --skip-grant-tables&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;selanjutnya ketika bisa langsung masuk ke mysql prompt dengan mengetik &lt;b&gt;mysql&lt;/b&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mysql&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;setelah masuk di mysql prompt jalankan perintah berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mysql&amp;gt; FLUSH PRIVILEGES;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;#untuk mysql versi 5.7.6 keatas, ketik perintah berikut untuk mengganti password user root&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;password_baru&#39;;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;#sedangkan untuk mysql versi 5.7.5 kebawah, ketik perintah berikut&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mysql&amp;gt; SET PASSWORD FOR &#39;root&#39;@&#39;localhost&#39;&amp;nbsp;= PASSWORD(&#39;password_baru&#39;);&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Setelahnya tutup proses mysqld_safe --skip-grant-tables dan restart mysql secara normal&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;sudo service mysql start&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;maka kita bisa login kembali ke mysql prompt sebagai user root dengan password baru&lt;/li&gt;
&lt;li&gt;Menjalankan file sql di dalam mysql prompt&lt;br /&gt;&lt;br /&gt;Jika di PostgreSQL kita bisa menjalankan file sql dalam psql prompt dengan mengetik&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;\i path_to_file.sql&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Dan untuk di MySQL kita harus mengetik&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;\. path_to_file.sql&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;Berbeda dengan psql prompt yang mempunyai autocomplete path dengan menekan tab,&lt;br /&gt;di mysql prompt kita harus mengetik manual lokasi file sql, jika posisi &lt;i&gt;directory&lt;/i&gt; saat kita mengakses mysql prompt berbeda dengan lokasi file.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
*The end&lt;/div&gt;
&lt;/div&gt;</description><link>http://javanatics.blogspot.com/2016/03/mysql-catatan-pengingat.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-4138841456421787984</guid><pubDate>Sat, 21 Jun 2014 09:05:00 +0000</pubDate><atom:updated>2014-06-21T16:05:52.377+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Banana Pi</category><category domain="http://www.blogger.com/atom/ns#">HDMI to VGA</category><category domain="http://www.blogger.com/atom/ns#">Monitor Out Of Range</category><category domain="http://www.blogger.com/atom/ns#">Raspberry Pi</category><title>Raspberry Pi | Problem Monitor Out of Range 60Hz</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Halo apa kabar sahabat sekalian? Semoga sahabat semua senantiasa dalam limpahan kebaikan dari Allah SWT, aamiin.&lt;br /&gt;
&lt;br /&gt;
Sudah lama saya tidak posting di blog ini, hehehe maklum orang sok sibuk :D.&lt;br /&gt;
&lt;br /&gt;
Kali ini saya ingin berbagi mengenai &lt;a href=&quot;http://www.raspberrypi.org/&quot; target=&quot;_blank&quot;&gt;Raspberry Pi&lt;/a&gt;, lebih tepatnya saya menggunakan varian Banana Pi. Karena ada tugas kantor, saya harus mencoba &lt;b&gt;komputer mungil&lt;/b&gt;&amp;nbsp;ini di rumah (sekalian ngoprek).&lt;br /&gt;
Berbekal konverter HDMI to VGA saya mencoba menghubungkan &lt;b&gt;Banana Pi&lt;/b&gt;&amp;nbsp;ke LCD monitor 19&quot;, namun ternyata ada masalah, yakni muncul informasi &quot;&lt;b&gt;Out of Range bla bla&lt;/b&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
Setelah googling sebentar saya menemukan link &lt;a href=&quot;http://www.raspberrypi.org/forums/viewtopic.php?f=26&amp;amp;t=24191&quot; target=&quot;_blank&quot;&gt;berikut&lt;/a&gt;, dan saya mendapatkan pencerahan bahwa untuk mengatasi hal ini kita bisa mengedit file &lt;b&gt;config.txt&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Jadi berikut hal-hal yg saya lakukan:&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Mencabut sdcard dari banana pi dan memasangnya ke laptop&lt;/li&gt;
&lt;li&gt;Saya edit file config.txt yg ada di folder &lt;b&gt;BOOT&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;uncomment&lt;/i&gt;&amp;nbsp;2 baris berikut, jika belum ada mungkin sahabat bisa menambahkannya sendiri&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;hdmi_group=1&amp;nbsp;&lt;/li&gt;
&lt;li&gt;hdmi_mode=1&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Setelah editing selesai jangan lupa simpan file, dan cabut sdcard dari laptop (jangan lupa dieject dulu loh ya :P)&lt;/li&gt;
&lt;li&gt;Pasang kembali sdcard pada banana pi, dan lakukan booting kembali&lt;/li&gt;
&lt;li&gt;Maka hasilnya.... voila&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRGYjW0aFXoHs2g33d2mj2J4D7oE1bKrv0gZHU5t6J6pOfB4AtX4wx2mEw9LZ_y2eC8qO8j4xbYN3z3i7NRbaeNNlDHaRzdC1jgxJlMGST9MfhWTgrBg8llXtkcYy-CZovmGW6LVVKaE9/s1600/banana_pi_image.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Raspberry Pi | Banana Pi&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRGYjW0aFXoHs2g33d2mj2J4D7oE1bKrv0gZHU5t6J6pOfB4AtX4wx2mEw9LZ_y2eC8qO8j4xbYN3z3i7NRbaeNNlDHaRzdC1jgxJlMGST9MfhWTgrBg8llXtkcYy-CZovmGW6LVVKaE9/s1600/banana_pi_image.jpg&quot; height=&quot;240&quot; title=&quot;Banana Pi&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Banana Pi on Action&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2014/06/raspberry-pi-problem-monitor-out-of.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRGYjW0aFXoHs2g33d2mj2J4D7oE1bKrv0gZHU5t6J6pOfB4AtX4wx2mEw9LZ_y2eC8qO8j4xbYN3z3i7NRbaeNNlDHaRzdC1jgxJlMGST9MfhWTgrBg8llXtkcYy-CZovmGW6LVVKaE9/s72-c/banana_pi_image.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-678476491485093081</guid><pubDate>Wed, 29 May 2013 13:26:00 +0000</pubDate><atom:updated>2013-05-29T20:27:18.140+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Bluetooth</category><category domain="http://www.blogger.com/atom/ns#">Precise Pangolin</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu 12.04</category><title>Ubuntu | Menerima File Dari Device Bluetooth</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Lama ga ketemu ya sahabat javanatics, apa kabar? &lt;br /&gt;
Semoga sahabat sekalian senantiasa dalam limpahan rahmat dari Tuhan Yang Maha Esa.&lt;br /&gt;
Aamiin&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Kali ini saya ingin berbagi cara untuk mengkonfigurasi &lt;a href=&quot;http://www.ubuntu.com/&quot; target=&quot;_blank&quot;&gt;Ubuntu 12.04&lt;/a&gt; agar bisa menerima file yang dikirim dari device bluetooth (sebagai contoh saya ingin mengirim foto dari device Android saya).&lt;br /&gt;
Secara default, setting bluetooth di &lt;a href=&quot;http://www.javanatics.com/2012/11/ubuntu-problem-wifi-switch-dell.html&quot; target=&quot;_blank&quot;&gt;Ubuntu 12.04&lt;/a&gt;&amp;nbsp;belum bisa digunakan untuk menerima file yang kita kirim melalui bluetooth. Jadi jangan heran jika proses pengiriman file ke Ubuntu kita selalu gagal.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Berikut adalah langkah-langkah untuk mengkonfigurasi agar Ubuntu kita bisa menerima file dari device bluetooth.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Masuk ke dashboard Unity dan akses aplikasi &quot;Personal File Sharing&quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnTPgj0w8ewoHpd7Dts6WhUqr5Ye89vYYfshGWLBAOjjnVrXcG9BrLYSUkqHQnhD2ntkQhnEup0xD7l0T4p6Yo5BXji9jKfeDZJvpUg3_PCUCcWSy01ouZ10uTqfQlM72GfxIKjpPRQshJ/s1600/Menu_042.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;165&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnTPgj0w8ewoHpd7Dts6WhUqr5Ye89vYYfshGWLBAOjjnVrXcG9BrLYSUkqHQnhD2ntkQhnEup0xD7l0T4p6Yo5BXji9jKfeDZJvpUg3_PCUCcWSy01ouZ10uTqfQlM72GfxIKjpPRQshJ/s320/Menu_042.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&amp;nbsp;Pada window preferensi Personal File Sharing, centang opsi &lt;b&gt;Receive files in Downloads folder over Bluetooth&lt;/b&gt;&amp;nbsp;lalu klik tombol &lt;b&gt;Close&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnB9CDRi1YPQYv7VHIWTyUtTaBWHTXgSX2wQ7p1-ieXo0tJ8OC1H-cTnMPe-bGLSGEJZX8l_yB5mbfZ7UdGebLibUDp2Pbyf3KuMAFVUXQ3Q95L-KkO4gNxTfYKpuYxlfR8M-Vc0a_sjwN/s1600/Personal+File+Sharing+Preferences_043.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnB9CDRi1YPQYv7VHIWTyUtTaBWHTXgSX2wQ7p1-ieXo0tJ8OC1H-cTnMPe-bGLSGEJZX8l_yB5mbfZ7UdGebLibUDp2Pbyf3KuMAFVUXQ3Q95L-KkO4gNxTfYKpuYxlfR8M-Vc0a_sjwN/s320/Personal+File+Sharing+Preferences_043.png&quot; width=&quot;201&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1LvRnq2druJBQduJusaqRnrKO-YtjcezxIpOg9wiFwRulP7bdCXN2CKX-ukn7LYah0OTFclv9Sv-V6jDFGzCYQM-f-QP3Jj9zGS3hpHULBtMCMCD-neQDTtLXDUX03ReCcc8WeorBDGzP/s1600/Personal+File+Sharing+Preferences_044.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1LvRnq2druJBQduJusaqRnrKO-YtjcezxIpOg9wiFwRulP7bdCXN2CKX-ukn7LYah0OTFclv9Sv-V6jDFGzCYQM-f-QP3Jj9zGS3hpHULBtMCMCD-neQDTtLXDUX03ReCcc8WeorBDGzP/s320/Personal+File+Sharing+Preferences_044.png&quot; width=&quot;201&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Ulangi kembali mengirim file dari device Bluetooth kita, dan voila...&lt;br /&gt;File otomatis tersimpan di folder&amp;nbsp;&lt;b&gt;Downloads&lt;/b&gt;&amp;nbsp;pada direktori home kita.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipym9t0Pve3CXA5pGueJlZewxWBBtbF-CYS1OphPP6ayicUxYd7ae4-6wCSWFJ4bVM1rKwC4uGbqJDjaTKQj5cqUGkmevdjB1Dmiqr1GwyqluxuE6tcjxld-KOW6W4oJHIyTt80tsdq2le/s1600/File+Received_045.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;75&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipym9t0Pve3CXA5pGueJlZewxWBBtbF-CYS1OphPP6ayicUxYd7ae4-6wCSWFJ4bVM1rKwC4uGbqJDjaTKQj5cqUGkmevdjB1Dmiqr1GwyqluxuE6tcjxld-KOW6W4oJHIyTt80tsdq2le/s320/File+Received_045.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
referensi:&amp;nbsp;&lt;a href=&quot;http://askubuntu.com/questions/131570/ubuntu-12-04-bluetooth-problem&quot;&gt;http://askubuntu.com/questions/131570/ubuntu-12-04-bluetooth-problem&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2013/05/ubuntu-menerima-file-dari-device.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnTPgj0w8ewoHpd7Dts6WhUqr5Ye89vYYfshGWLBAOjjnVrXcG9BrLYSUkqHQnhD2ntkQhnEup0xD7l0T4p6Yo5BXji9jKfeDZJvpUg3_PCUCcWSy01ouZ10uTqfQlM72GfxIKjpPRQshJ/s72-c/Menu_042.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-8920849236078433618</guid><pubDate>Sun, 10 Mar 2013 12:07:00 +0000</pubDate><atom:updated>2013-03-10T19:07:57.890+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Google Gson</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Json</category><title>Java | Mudahnya Konversi Java Object - JSON dengan Google Gson</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Pada kesempatan kali ini saya ingin berbagi dengan sahabat tentang konversi object menjadi JSON atau sebaliknya.&lt;br /&gt;
&lt;div&gt;
Sahabat tentunya sudah tidak asing lagi dengan format JSON bukan?&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Bagi yang belum kenal, silahkan kenalan lebih dalam lewat halaman &lt;a href=&quot;http://en.wikipedia.org/wiki/JSON&quot; target=&quot;_blank&quot;&gt;wikinya&lt;/a&gt; ya. :)&lt;br /&gt;
&lt;br /&gt;
Sebenarnya kita bisa membuat coding sendiri untuk melakukan konversi ke format JSON,&lt;br /&gt;
&lt;div&gt;
karena &lt;a href=&quot;http://en.wikipedia.org/wiki/JSON&quot; target=&quot;_blank&quot;&gt;JSON&lt;/a&gt; merupakan format yang berbasis text.&lt;br /&gt;
Hanya saja, jika sudah ada yang membuatnya terlebih dahulu dan sudah &lt;i&gt;production ready&lt;/i&gt;, terlebih lagi jika pembuatnya adalah &lt;a href=&quot;http://code.google.com/p/google-gson/&quot; target=&quot;_blank&quot;&gt;Google&lt;/a&gt;, kenapa harus membuat library sendiri.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Ingat prinsip &lt;i&gt;don&#39;t reinvent the wheel&lt;/i&gt; kan.&lt;/div&gt;
&lt;div&gt;
Jadi saya memilih untuk menggunakan library Google Gson, yang informasi lebih detailnya bisa dinikmati pada halaman berikut,&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/google-gson/&quot;&gt;http://code.google.com/p/google-gson/&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ok, &lt;i&gt;let&#39;s get our hand dirty !&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Perlu diketahui, seperti biasa saya menggunakan &lt;a href=&quot;http://maven.apache.org/&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt;, sehingga untuk menambahkan library Google Gson kita tinggal mengedit file pom.xml dan menambahkan dependency berikut:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupid&amp;gt;com.google.code.gson&amp;lt;/groupid&amp;gt;
 &amp;lt;artifactid&amp;gt;gson&amp;lt;/artifactid&amp;gt;
 &amp;lt;version&amp;gt;2.2.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Pertama saya, membuat sebuah class &lt;a href=&quot;http://en.wikipedia.org/wiki/Plain_Old_Java_Object&quot; target=&quot;_blank&quot;&gt;POJO&lt;/a&gt; dengan nama &lt;b&gt;Person&lt;/b&gt;, sebagai object yang akan dikonversi.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class Person {

    private String name;
    private int age;
    private List&lt;string&gt; message;

    public Person() {
    }

    public Person(String name, int age, List&lt;string&gt; message) {
        this.name = name;
        this.age = age;
        this.message = message;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List&lt;string&gt; getMessage() {
        return message;
    }

    public void setMessage(List&lt;string&gt; message) {
        this.message = message;
    }

    @Override
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append(String.format(&quot;name: %s\n&quot;, name));
        buffer.append(String.format(&quot;age: %d\n&quot;, age));
        buffer.append(&quot;message:\n&quot;);
        if (null != message) {
            for (String msg : message) {
                buffer.append(String.format(&quot;\t%s\n&quot;, msg));
            }
        }
        return buffer.toString();
    }
}&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/string&gt;&lt;/pre&gt;
&lt;br /&gt;
Isi classnya sederhana saja, namun saya sudah mengoverride method toString agar hasil System.out.print class &lt;b&gt;Person&lt;/b&gt; bisa dibaca dengan mudah.&lt;br /&gt;
&lt;br /&gt;
Google Gson menyediakan class &lt;b&gt;Gson&lt;/b&gt; untuk menghandle proses konversi, melalui method &lt;b&gt;toJson&lt;/b&gt; dan &lt;b&gt;fromJson&lt;/b&gt;.&lt;br /&gt;
Berikut saya lampirkan class util yang saya buat&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class JsonUtil {

    public static String convertPersonToJson(Person person) {
        return convertPersonToJson(person, true);
    }

    public static String convertPersonToJson(Person person, boolean prettyPrint) {
        GsonBuilder builder = new GsonBuilder();
        builder.serializeNulls();
        if (prettyPrint) {
            builder.setPrettyPrinting();
        }
        Gson gson = builder.create();

        return gson.toJson(person, Person.class);
    }

    public static Person getPersonFromJson(String json) {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();

        return gson.fromJson(json, Person.class);
    }
}&lt;/pre&gt;
&lt;br /&gt;
Secara default output json yang dihasilkan oleh Gson masih dalam mode &lt;i&gt;compact&lt;/i&gt;,&lt;br /&gt;
namun Gson juga menyediakan opsi untuk menghasilkan output json yang lebih mudah dibaca (*disebut &lt;i&gt;prettyprint&lt;/i&gt;).&lt;br /&gt;
&lt;br /&gt;
Kemudian kita buat main class untuk mencoba perbedaan antara mode compact dan mode &lt;i&gt;prettyprint.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public class AppLauncher {

    public static void main(String[] args) {
        Person person = new Person();
        person.setName(&quot;Eko Suhariyadi&quot;);
        person.setAge(26);
        person.setMessage(Arrays.asList(&quot;Uzumaki Naruto&quot;, &quot;Uchiha Sasuke&quot;, &quot;Hatake Kakashi&quot;, &quot;Jackson Michael&quot;));

        String jsonCompact = JsonUtil.convertPersonToJson(person, false);
        System.out.println(&quot;Json compact:&quot;);
        System.out.println(jsonCompact);


        String jsonPretty = JsonUtil.convertPersonToJson(person, true);
        System.out.println(&quot;\nJson prettyprint:&quot;);
        System.out.println(jsonPretty);

        Person fromJson = JsonUtil.getPersonFromJson(jsonPretty);
        System.out.println(fromJson);
    }
}&lt;/pre&gt;
&lt;br /&gt;
Output hasil run main class tersebut adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Json compact:&lt;br /&gt;
{&quot;name&quot;:&quot;Eko Suhariyadi&quot;,&quot;age&quot;:26,&quot;message&quot;:[&quot;Uzumaki Naruto&quot;,&quot;Uchiha Sasuke&quot;,&quot;Hatake Kakashi&quot;,&quot;Jackson Michael&quot;]}&lt;br /&gt;
&lt;br /&gt;
Json prettyprint:&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &quot;name&quot;: &quot;Eko Suhariyadi&quot;,&lt;br /&gt;
&amp;nbsp; &quot;age&quot;: 26,&lt;br /&gt;
&amp;nbsp; &quot;message&quot;: [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;Uzumaki Naruto&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;Uchiha Sasuke&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;Hatake Kakashi&quot;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;Jackson Michael&quot;&lt;br /&gt;
&amp;nbsp; ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
name: Eko Suhariyadi&lt;br /&gt;
age: 26&lt;br /&gt;
message:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Uzumaki Naruto&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Uchiha Sasuke&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Hatake Kakashi&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Jackson Michael&lt;br /&gt;
&lt;br /&gt;
Bagaimana, sangat mudah kan !?&lt;br /&gt;
Selamat mencoba dan happy coding :).&lt;br /&gt;
&lt;br /&gt;
Source code bisa diakses melalui akun github saya,&amp;nbsp;&lt;a href=&quot;https://github.com/ekosuhariyadi/belajar-java&quot;&gt;https://github.com/ekosuhariyadi/belajar-java&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2013/03/java-mudahnya-konversi-java-object-json.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-387154917996766460</guid><pubDate>Sun, 03 Feb 2013 12:31:00 +0000</pubDate><atom:updated>2013-02-03T19:31:04.448+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">AutoCompletion</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">JIDE OSS Common Layer</category><category domain="http://www.blogger.com/atom/ns#">Swing</category><title>Java Swing | Text AutoCompletion dengan JIDE Common Layer AutoCompletion</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Kali ini saya ingin berbagi mengenai cara membuat &lt;i&gt;autocomplete&lt;/i&gt;&amp;nbsp;pada JTextField dan JComboBox &amp;nbsp;dengan library yang bernama &lt;a href=&quot;http://www.jidesoft.com/products/oss.htm&quot; target=&quot;_blank&quot;&gt;JIDE Common Layer&lt;/a&gt;. JIDE Common Layer merupakan sebuah product open source dari &lt;a href=&quot;http://www.jidesoft.com/&quot; target=&quot;_blank&quot;&gt;Jidesoft&lt;/a&gt;&amp;nbsp;(sebuah perusahaan komersil yang menyediakan komponen custom Java Swing).&amp;nbsp;Namun pada post kali ini saya hanya akan membahas komponen AutoCompletion yang disediakan pada library JIDE Common Layer.&lt;br /&gt;
&lt;br /&gt;
Sebelumnya kita harus menambahkan dependency JIDE Common Layer pada project yang kita buat.&lt;br /&gt;
Karena saya menggunakan &lt;a href=&quot;http://www.javanatics.com/2011/09/maven-download-source-codejavadoc.html&quot; target=&quot;_blank&quot;&gt;Maven&lt;/a&gt; dan JIDE Common Layer sudah tersedia pada maven repository, silahkan tambahkan dependency berikut pada pom.xml&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;dependency&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;groupId&amp;gt;com.jidesoft&amp;lt;/groupId&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;artifactId&amp;gt;jide-oss&amp;lt;/artifactId&amp;gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;version&amp;gt;3.5.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Untuk mencoba AutoCompletion, saya membuat sebuah form dengan JInternalFrame dan menambahkan sebuah JTextField serta sebuah JComboBox.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6pfCH9DGYo03bnI9-A95RHPIvh2wY_x7pREqa0Cc5ZBHPp0N17_C8TzqpQfirm_JTFvyqUnM4dCIOdVTYap0PcGaX8ClULf8rTBw05K1vwZ7vEUAVi9x6K5ULVYQciLcWcrqkEqfJjxqF/s1600/Selection_026.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6pfCH9DGYo03bnI9-A95RHPIvh2wY_x7pREqa0Cc5ZBHPp0N17_C8TzqpQfirm_JTFvyqUnM4dCIOdVTYap0PcGaX8ClULf8rTBw05K1vwZ7vEUAVi9x6K5ULVYQciLcWcrqkEqfJjxqF/s320/Selection_026.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Karena komponen AutoCompletion membutuhkan data berupa java.util.List, maka saya harus menampung data pada class List (pada post ini saya menggunakan class ArrayList).&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp; &amp;nbsp; private List&amp;lt;String&amp;gt; listNama;
&amp;nbsp; &amp;nbsp; private List&amp;lt;String&amp;gt; listKota;

&amp;nbsp; &amp;nbsp; /**
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Creates new form JideOSSAutoCompletionIFrame
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&amp;nbsp; &amp;nbsp; public JideOSSAutoCompletionIFrame() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initData();
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initComponents();
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initAutoCompletion();
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; private void initData() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listNama = new ArrayList&amp;lt;String&amp;gt;(
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Arrays.asList(&quot;Eko Suhariyadi&quot;, &quot;Hiro Kunimi&quot;, &quot;Chiaki Shinichi&quot;, &quot;Kudo Shinichi&quot;, &quot;Haruka Koga&quot;, &quot;Megumi Noda&quot;, &quot;Ran Mouri&quot;));

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; listKota = new ArrayList&amp;lt;String&amp;gt;(
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Arrays.asList(&quot;Sidoarjo&quot;, &quot;Surabaya&quot;, &quot;Malang&quot;, &quot;Madiun&quot;, &quot;Jakarta&quot;));
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; private void initAutoCompletion() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AutoCompletion txtNamaCompletion = new AutoCompletion(txtNama, listNama);
&amp;nbsp; &amp;nbsp; }
    private javax.swing.JComboBox comboKota;
    private javax.swing.JTextField txtNama;&lt;/pre&gt;
&lt;br /&gt;
Pada potongan kode di atas, saya mendeklarasi 2 List untuk menampung data nama dan kota. Inisialisasi data saya buat pada method initData. Cara menggunakan JIDE AutoCompletion pada JTextField sangatlah mudah, seperti yang terlihat pada method initAutoCompletion, kita tinggal menginstantiasi class AutoCompletion dengan parameter berupa JTextField dan List data pada konstruktornya.&lt;br /&gt;
&lt;br /&gt;
Lalu bagaimana dengan JComboBox ?&lt;br /&gt;
Berbeda dengan JTextField, untuk bisa menggunakan AutoCompletion kita harus menginstantiasi JComboBox dengan konstruktor milik JIDE Common Layer, bukan dengan konstruktor JComboBox.&lt;br /&gt;
Kita juga harus menyertakan List data pada konstruktornya.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;comboKota = new AutoCompletionComboBox(listKota.toArray());&lt;/pre&gt;
&lt;br /&gt;
Namun karena saya menggunakan fitur drag and drop pada Netbeans, maka saya tidak bisa mengedit secara langsung potongan kode pada method initComponents yang digenerate secara otomatis oleh &lt;a href=&quot;http://www.javanatics.com/2012/11/netbeans-mendisable-scan-for-external.html&quot; target=&quot;_blank&quot;&gt;Netbeans&lt;/a&gt;.&lt;br /&gt;
Namun kita bisa mengeditnya melalui &lt;b&gt;Tab Properties&lt;/b&gt;&amp;nbsp;dengan cara sebagai berikut:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Klik comboKota pada Form Designer Netbeans, lalu buka Tab Properties.&lt;br /&gt;Akses action bar &lt;b&gt;Code&lt;/b&gt;, dan cari properti &lt;b&gt;Custom Creation Code&lt;/b&gt;, lalu klik edit&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoxzOUf7Evh0MOEGDIiKSHJmXFmwSvm4PnwWZi2Af69kXiloiRG6BD8A4KFm2Ap_7VR10Q0ZFS-nAwJX1AtoziZbvIenvwJ7Q7qS_ZjMIx6aPNFZJtjEql4NMb1OxxozlHkqb7iUTPhrY4/s1600/Selection_024.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoxzOUf7Evh0MOEGDIiKSHJmXFmwSvm4PnwWZi2Af69kXiloiRG6BD8A4KFm2Ap_7VR10Q0ZFS-nAwJX1AtoziZbvIenvwJ7Q7qS_ZjMIx6aPNFZJtjEql4NMb1OxxozlHkqb7iUTPhrY4/s320/Selection_024.png&quot; width=&quot;316&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Masukkan potongan kode di atas pada dialog editor yang tersedia, lalu klik &lt;b&gt;OK&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhs7bGUOeOj0nl3VQipSdzvIdPeQT8fj-N3j0EbCnywpvfmJ0PpgGQwHggxJ-UILan0yK9X-gFzUn6ILw1QHIobSvwC7TGksmrhYPtDj0U3rNxUg3NwM49BjwbkdH0j-KzsSJxNXlVYVH-/s1600/comboKota+%5BJComboBox%5D+-+Custom+Creation+Code_025.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhs7bGUOeOj0nl3VQipSdzvIdPeQT8fj-N3j0EbCnywpvfmJ0PpgGQwHggxJ-UILan0yK9X-gFzUn6ILw1QHIobSvwC7TGksmrhYPtDj0U3rNxUg3NwM49BjwbkdH0j-KzsSJxNXlVYVH-/s320/comboKota+%5BJComboBox%5D+-+Custom+Creation+Code_025.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Maka apabila kita periksa kembali potongan kode instantiasi comboKota akan berubah dari&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;comboKota = new JComboBox();&lt;/pre&gt;
&lt;br /&gt;
menjadi&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;comboKota = new AutoCompletionComboBox(listKota.toArray());&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Jalankan program dan buka form JIDE OSS AutoCompletion, lalu coba mengetik pada text field nama dan combobox kota. Pada komponen tersebut akan ditampilkan data pada List yang sesuai dengan nilai yang kita ketikkan. Sangat mudah bukan, dan kita tidak perlu melakukan &lt;i&gt;reinvent the wheel&lt;/i&gt;&amp;nbsp;karena JIDE Common Layer sudah menyediakannya untuk kita, gratis lagi :).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmRTsX0I5ChP7km2LBAbostQk42sjwTwfFD90iNC-fAqZfm70AiV5taDxiNCrT9xnEOJEhVtXHxrMbHa14FNrn94B-P7dWEn2RGrGNGZYTmrD7eU2d7wzP-tN_1BwzJQelBXJHKVBJgb7/s1600/Selection_027.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmRTsX0I5ChP7km2LBAbostQk42sjwTwfFD90iNC-fAqZfm70AiV5taDxiNCrT9xnEOJEhVtXHxrMbHa14FNrn94B-P7dWEn2RGrGNGZYTmrD7eU2d7wzP-tN_1BwzJQelBXJHKVBJgb7/s320/Selection_027.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Source code bisa diakses via akun github saya di&amp;nbsp;&lt;a href=&quot;https://github.com/ekosuhariyadi/belajar-javaswing&quot;&gt;https://github.com/ekosuhariyadi/belajar-javaswing&lt;/a&gt;.&lt;br /&gt;
Semoga membantu :).&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2013/02/java-swing-text-autocompletion-dengan.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6pfCH9DGYo03bnI9-A95RHPIvh2wY_x7pREqa0Cc5ZBHPp0N17_C8TzqpQfirm_JTFvyqUnM4dCIOdVTYap0PcGaX8ClULf8rTBw05K1vwZ7vEUAVi9x6K5ULVYQciLcWcrqkEqfJjxqF/s72-c/Selection_026.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-116031459185253999</guid><pubDate>Thu, 13 Dec 2012 15:08:00 +0000</pubDate><atom:updated>2013-01-15T04:12:28.359+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Swing</category><title>Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama.&lt;br /&gt;
&lt;br /&gt;
Langkah-langkah yang harus kita lakukan adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa.&lt;br /&gt;
Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik&amp;nbsp;maka program akan tertutup.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);&lt;/pre&gt;
&lt;br /&gt;
2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface&amp;nbsp;WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun&amp;nbsp;yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button&amp;nbsp;close diklik.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Sebagai informasi, apabila kita menambahkan WindowListener secara langsung maka semua method&amp;nbsp;dari interface tersebut harus kita implementasikan, sehingga coding yang kita tulis akan terlihat&amp;nbsp;sangat panjang. Padahal yang kita butuhkan hanya mengimplementasikan method windowClosing.&lt;br /&gt;
Untuk itu Java menyediakan class WindowAdapter yang sudah mengimplementasikan interface WindowListener, sehingga cukup method windowClosing saja yang perlu kita tulis.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  this.addWindowListener(new WindowAdapter() {&lt;/pre&gt;
&lt;pre class=&quot;brush:java&quot;&gt;&amp;nbsp; &amp;nbsp; @Override
&amp;nbsp; &amp;nbsp; public void windowClosing(WindowEvent e) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; doExit();
&amp;nbsp; &amp;nbsp; }
  });&lt;/pre&gt;
&lt;br /&gt;
3. Dan yang terakhir adalah kita harus menambahkan dialog konfirmasi untuk mengambil pilihan user&amp;nbsp;apakah melanjutkan keluar dari aplikasi atau tidak. Kita bisa menggunakan&amp;nbsp;JOptionPane.showConfirmDialog.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  public void doExit() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; int confirm = JOptionPane.showConfirmDialog(this,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Konfirmasi Keluar Aplikasi&quot;,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Yakin untuk keluar dari program&quot;,
&amp;nbsp; &amp;nbsp; &amp;nbsp; JOptionPane.YES_NO_OPTION,
&amp;nbsp; &amp;nbsp; &amp;nbsp;JOptionPane.QUESTION_MESSAGE);

&amp;nbsp; &amp;nbsp; &amp;nbsp;if (confirm == JOptionPane.YES_OPTION) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.exit(0);
&amp;nbsp; &amp;nbsp; &amp;nbsp;}
  }&lt;/pre&gt;
&lt;br /&gt;
Secara keseluruhan, listingnya adalah sebagai berikut (perlu diketahui saya menggunakan Netbeans&amp;nbsp;7.2 untuk menulis codenya) :&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;  public class MainFrame extends javax.swing.JFrame {
&amp;nbsp; &amp;nbsp; /**
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Creates new form MainFrame
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/
&amp;nbsp; &amp;nbsp; public MainFrame() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initComponents();
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; initListener();
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; private void initListener() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; this.addWindowListener(new WindowAdapter() {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void windowClosing(WindowEvent e) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; doExit();
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; public void doExit() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int confirm = JOptionPane.showConfirmDialog(this,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Konfirmasi Keluar Aplikasi&quot;,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;Yakin untuk keluar dari program&quot;,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; JOptionPane.YES_NO_OPTION,
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; JOptionPane.QUESTION_MESSAGE);

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (confirm == JOptionPane.YES_OPTION) {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.exit(0);
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; public static void main(String args[]) {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; java.awt.EventQueue.invokeLater(new Runnable() {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void run() {
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new MainFrame().setVisible(true);
&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;/pre&gt;
&lt;br /&gt;
Semoga bermanfaat :)&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/java-menambahkan-dialog-konfirmasi_13.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-1050405689243271313</guid><pubDate>Tue, 11 Dec 2012 22:57:00 +0000</pubDate><atom:updated>2013-01-15T04:15:17.653+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">Query</category><category domain="http://www.blogger.com/atom/ns#">SQL</category><title>PostgreSQL | 4 Reserved Word Yang Useful</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://www.javanatics.com/2012/12/postgresql-cross-tabulation-dengan.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;&amp;nbsp;menyediakan 4 &lt;i&gt;reserved word&lt;/i&gt;&amp;nbsp;yang menurut saya sangat useful (berguna) yakni:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;CURRENT_DATE&lt;/b&gt;, berfungsi untuk menampilkan tanggal hari ini pada server.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CURRENT_TIME&lt;/b&gt;, berfungsi untuk menampilkan jam saat ini pada&amp;nbsp;server.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CURRENT_TIMESTAMP&lt;/b&gt;, berfungsi untuk menampilkan tanggal dan jam saat ini pada&amp;nbsp;server. PostgreSQL juga menyediakan fungsi &lt;b&gt;now() &lt;/b&gt;yang memiliki fungsi yang sama dengan &lt;b&gt;CURRENT_TIMESTAMP&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CURRENT_USER&lt;/b&gt;, berfungsi untuk menampilkan user aktif pada PostgreSQL session (user yang melakukan koneksi database).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Untuk informasi, keempat &lt;i&gt;reserved word&lt;/i&gt;&amp;nbsp;tersebut juga menjadi standar pada &lt;a href=&quot;http://en.wikipedia.org/wiki/SQL-92&quot; target=&quot;_blank&quot;&gt;SQL92&lt;/a&gt; dan &lt;a href=&quot;http://www.objs.com/x3h7/sql3.htm&quot; target=&quot;_blank&quot;&gt;SQL3&lt;/a&gt;, sehingga database yang mendukung standar tersebut seharusnya juga memiliki implementasinya.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Berikut ini adalah contoh penggunaan 4 &lt;i&gt;reserved word&lt;/i&gt;&amp;nbsp;tersebut dalam query:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class=&quot;brush&quot; sql=&quot;sql&quot;&gt;1. SELECT CURRENT_DATE;
&amp;nbsp; &amp;nbsp; date &amp;nbsp; &amp;nbsp;
------------
&amp;nbsp;2012-12-12
(1 row)
&lt;/pre&gt;
&lt;pre class=&quot;brush&quot; sql=&quot;sql&quot;&gt;2. SELECT CURRENT_TIME;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;timetz &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;
--------------------
&amp;nbsp;05:32:31.732268+07
(1 row)


3. SELECT CURRENT_TIMESTAMP; atau SELECT now();
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; now &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
-------------------------------
&amp;nbsp;2012-12-12 05:32:34.260398+07
(1 row)


4. SELECT CURRENT_USER;
&amp;nbsp;current_user&amp;nbsp;
--------------
&amp;nbsp;bits
(1 row)&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy Querying :)&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/postgresql-4-reserved-word-yang-useful.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-2113975871736106386</guid><pubDate>Mon, 10 Dec 2012 22:35:00 +0000</pubDate><atom:updated>2013-01-15T04:16:10.558+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">Query</category><category domain="http://www.blogger.com/atom/ns#">SQL</category><title>PostgreSQL | Cross Tabulation Dengan Ekspresi Kondisional CASE</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Pada &lt;a href=&quot;http://www.javanatics.com/2012/12/postgresql-ekspresi-kondisional-pada_10.html&quot; target=&quot;_blank&quot;&gt;posting&lt;/a&gt; sebelumnya, saya sudah berbagi tentang cara menggunakan ekspresi kondisional &lt;b&gt;CASE&lt;/b&gt;&amp;nbsp;pada query. Sekarang saya ingin berbagi cara untuk memanfaatkan ekspresi &lt;b&gt;CASE&lt;/b&gt;&amp;nbsp;untuk membentuk &lt;b&gt;&lt;i&gt;cross tabulation&lt;/i&gt;&lt;/b&gt; query. Apa itu &lt;i style=&quot;font-weight: bold;&quot;&gt;cross tabulation&lt;/i&gt;? Silahkan baca di &lt;a href=&quot;http://en.wikipedia.org/wiki/Cross_tabulation&quot; target=&quot;_blank&quot;&gt;wikipedia&lt;/a&gt; untuk lebih detail. :P&lt;br /&gt;
&lt;br /&gt;
Secara sederhana saya mengartikan &lt;i style=&quot;font-weight: bold;&quot;&gt;cross tabulation&lt;/i&gt;&amp;nbsp;adalah menyajikan data dari baris menjadi kolom.&lt;br /&gt;
Berikut contoh sederhana untuk menggambarkan apa itu &lt;b style=&quot;font-style: italic;&quot;&gt;cross tabulation&lt;/b&gt;.&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT * FROM siswa ORDER BY siswaid;

&amp;nbsp;siswaid | &amp;nbsp; &amp;nbsp; &amp;nbsp;nama &amp;nbsp; &amp;nbsp; &amp;nbsp;| sex
---------+----------------+-----
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1 | Eko Suhariyadi | L
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2 | Mori Ran &amp;nbsp; &amp;nbsp; &amp;nbsp; | P
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3 | Megumi Noda &amp;nbsp; &amp;nbsp;| P
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4 | Haruka Koga &amp;nbsp; &amp;nbsp;| P
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5 | Hiro Kunimi &amp;nbsp; &amp;nbsp;| L
(5 rows)&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Dari data tersebut akan kita sajikan informasi seperti berikut ini:&lt;/div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;&amp;nbsp;laki | perempuan
------+-----------
&amp;nbsp; &amp;nbsp; 2 | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3
(1 row)&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Dapat dilihat bahwa kita mentransformasikan data sex menjadi kolom. Mudah-mudahan contoh tersebut dapat membantu sahabat untuk memahami apa itu &lt;i style=&quot;font-weight: bold;&quot;&gt;cross tabulation&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sekarang langsung saja kita buat implementasinya di &lt;a href=&quot;http://www.javanatics.com/2012/11/postgresql-create-language-plpgsql-ke.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT&amp;nbsp;
COUNT(CASE WHEN sex=&#39;L&#39; THEN 1 ELSE NULL END) AS Laki,&amp;nbsp;
COUNT(CASE WHEN sex=&#39;P&#39; THEN 1 ELSE NULL END) AS Perempuan&amp;nbsp;
FROM siswa;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Bagaimana, sangat menarik bukan?! :D&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy querying&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/postgresql-cross-tabulation-dengan.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-531849083180819571</guid><pubDate>Mon, 10 Dec 2012 13:38:00 +0000</pubDate><atom:updated>2013-01-15T04:16:47.414+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">Query</category><category domain="http://www.blogger.com/atom/ns#">SQL</category><title>PostgreSQL | Ekspresi Kondisional CASE Pada Query</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
Salah satu fitur yang saya sukai dari &lt;a href=&quot;http://www.postgresql.org/docs/9.1/static/functions-conditional.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt; adalah dapat digunakannya ekspresi kondisional pada query. PostgreSQL menyediakan ekpresi CASE yang memiliki fungsi yang sama dengan statemen IF/ELSE pada bahasa pemrograman.&lt;br /&gt;
&lt;br /&gt;
Berikut adalah bentuk dari ekspresi CASE pada &lt;a href=&quot;http://www.javanatics.com/2012/11/postgresql-membuat-nomor-urut-dengan.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;CASE WHEN condition THEN result
&amp;nbsp; &amp;nbsp; &amp;nbsp;[WHEN ...]
&amp;nbsp; &amp;nbsp; &amp;nbsp;[ELSE result]
END&lt;/pre&gt;
&lt;br /&gt;
Untuk melihat bagaimana cara menggunakan ekspresi CASE, saya memiliki sebuah tabel number dengan sebuah kolom nomor yang memuat data bertipe integer.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT nomor FROM number ORDER BY nomor;
&amp;nbsp;nomor
-------
&amp;nbsp; &amp;nbsp; &amp;nbsp;1
&amp;nbsp; &amp;nbsp; &amp;nbsp;3
&amp;nbsp; &amp;nbsp; 32
&amp;nbsp; &amp;nbsp; 37
&amp;nbsp; &amp;nbsp; 38
&amp;nbsp; &amp;nbsp; 97
(6 rows)&lt;/pre&gt;
&lt;br /&gt;
Sekarang mari kita gunakan ekspresi CASE untuk menentukan apakah nomor tersebut merupakan bilangan ganjil atau genap.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT nomor, 
(CASE WHEN nomor % 2 = 0 THEN &#39;Bilangan Genap&#39; 
ELSE &#39;Bilangan Ganjil&#39; END) AS status 
FROM number ORDER BY nomor;&lt;/pre&gt;
&lt;br /&gt;
dan hasilnya adalah sebagai berikut:


&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;&amp;nbsp;nomor | &amp;nbsp; &amp;nbsp; status &amp;nbsp; &amp;nbsp; 
-------+-----------------
&amp;nbsp; &amp;nbsp; &amp;nbsp;1 | Bilangan Ganjil
&amp;nbsp; &amp;nbsp; &amp;nbsp;3 | Bilangan Ganjil
&amp;nbsp; &amp;nbsp; 32 | Bilangan Genap
&amp;nbsp; &amp;nbsp; 37 | Bilangan Ganjil
&amp;nbsp; &amp;nbsp; 38 | Bilangan Genap
&amp;nbsp; &amp;nbsp; 97 | Bilangan Ganjil
(6 rows)&lt;/pre&gt;
&lt;br /&gt;
Bagaimana? sangat menarik bukan!?&lt;br /&gt;
&lt;br /&gt;
Happy querying :)&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/postgresql-ekspresi-kondisional-pada_10.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-2879776372503235087</guid><pubDate>Sun, 02 Dec 2012 03:47:00 +0000</pubDate><atom:updated>2013-01-15T04:20:08.381+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache Derby</category><category domain="http://www.blogger.com/atom/ns#">iReport</category><category domain="http://www.blogger.com/atom/ns#">Jasper Reports</category><category domain="http://www.blogger.com/atom/ns#">JasperReports</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Java DB</category><title>iReport | Embedded Apache Derby Data Connection</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Untuk melengkapi postingan &lt;a href=&quot;http://www.javanatics.com/2012/12/ireport-membuat-koneksi-database-apache.html&quot; target=&quot;_blank&quot;&gt;sebelumnya&lt;/a&gt; tentang membuat koneksi database Apache Derby&amp;nbsp;(network database) di iReport.&lt;br /&gt;
&lt;br /&gt;
Kali ini saya ingin berbagi bagaimana membuat koneksi database Apache Derby dengan mode embedded pada iReport. Langkah-langkahnya tidak jauh berbeda seperti pada postingan sebelumnya, hanya saja ada dua perbedaan yakni:&lt;br /&gt;
&lt;br /&gt;
1. Kita harus menambahkan library &lt;b&gt;derby.jar&lt;/b&gt; pada classpath iReport&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-tDoTWayAHaTcKOl3EixIff40g8QbT3Ow4gw6EZQKxfY9zCmJLIarYlqTWJIQBiW0P_Uj5mGE1fX-qqoxdHBIKiH4SHHbarN4pjyXMHHWD4Nm3H6BevOPKXn79gZAaylMKCdg0gomqbTI/s1600/Options_022.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-tDoTWayAHaTcKOl3EixIff40g8QbT3Ow4gw6EZQKxfY9zCmJLIarYlqTWJIQBiW0P_Uj5mGE1fX-qqoxdHBIKiH4SHHbarN4pjyXMHHWD4Nm3H6BevOPKXn79gZAaylMKCdg0gomqbTI/s320/Options_022.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2. Selanjutnya pada saat membuat &lt;b&gt;JDBC Connection&lt;/b&gt;, &lt;b&gt;JDBC Driver&lt;/b&gt; yang harus diketikkan adalah &lt;b&gt;org.apache.derby.jdbc.EmbeddedDriver&lt;/b&gt;&amp;nbsp;dan JDBC Urlnya menjadi&amp;nbsp;&lt;b&gt;jdbc:derby:[lokasi database]&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqXk1Ut7lYdTKqhxQmFS_Gp37W4CMnLt2uKk44z68IxQmGaF46nIh9pAjQc31ndheZlHwHMOkrJTyCIh__KlJUgKiusKSM53Wkq_YeEdmg62bJrc9NfH4VVgMYB-fzYcp7gQU1CF-QTeP/s1600/+_023.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaqXk1Ut7lYdTKqhxQmFS_Gp37W4CMnLt2uKk44z68IxQmGaF46nIh9pAjQc31ndheZlHwHMOkrJTyCIh__KlJUgKiusKSM53Wkq_YeEdmg62bJrc9NfH4VVgMYB-fzYcp7gQU1CF-QTeP/s320/+_023.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Pada contoh di atas, saya mengisikan&amp;nbsp;&lt;b&gt;[lokasi database]&lt;/b&gt;&amp;nbsp;dengan&amp;nbsp;&lt;b&gt;/home/eko/.netbeans/7.2/derby/embedsample&lt;/b&gt;&amp;nbsp;yang merupakan path lokasi database (saya menggunakan linux, lebih tepatnya &lt;a href=&quot;http://www.javanatics.com/2012/11/ubuntu-problem-instalasi-netbeans-712.html&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt;). Jadi untuk sahabat pengguna Wind*ws, path bisa diganti dengan &lt;b&gt;Drive:lokasi database&lt;/b&gt;, misalkan &lt;b&gt;C:\lokasi_database&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Happy reporting :)&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/ireport-embedded-apache-derby-data.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-tDoTWayAHaTcKOl3EixIff40g8QbT3Ow4gw6EZQKxfY9zCmJLIarYlqTWJIQBiW0P_Uj5mGE1fX-qqoxdHBIKiH4SHHbarN4pjyXMHHWD4Nm3H6BevOPKXn79gZAaylMKCdg0gomqbTI/s72-c/Options_022.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-417407519507193903</guid><pubDate>Sun, 02 Dec 2012 02:25:00 +0000</pubDate><atom:updated>2013-01-15T04:18:14.179+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache Derby</category><category domain="http://www.blogger.com/atom/ns#">iReport</category><category domain="http://www.blogger.com/atom/ns#">Jasper Reports</category><category domain="http://www.blogger.com/atom/ns#">JasperReports</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Java DB</category><title>iReport | Membuat Koneksi Database Apache Derby</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://db.apache.org/derby/&quot; target=&quot;_blank&quot;&gt;Apache Derby&lt;/a&gt; maupun Java DB (Java DB merupakan versi Oracle dari Apache Derby) merupakan database berbasis Java yang dapat berjalan sebagai embedded maupun network database.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Untuk dapat menggunakan koneksi database Apache Derby pada iReport, terlebih dahulu kita harus menambahkan library JDBC pada &lt;b&gt;classpath&lt;/b&gt;. Disini saya menggunakan iReport versi 4.8.0, dan Apache Derby sebagai network database.&lt;br /&gt;
&lt;br /&gt;
1. Akses menu &lt;b&gt;Tools&lt;/b&gt; -&amp;gt; &lt;b&gt;Options&amp;nbsp;&lt;/b&gt;pada iReport&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhraz6RTOPjPP377JGVw92Vyri-xf-jZV1UaRFBtZcPXZwLxTVA4za1v4INSlih2Si0Q5Zr56Lyi3-zkkwGtcA9ob53t_y7jQK1S71ecSuxWtq5RJKLRcb1hDpcHo5DzqbFsxiyHWeKJF2e/s1600/Menu_012.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;179&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhraz6RTOPjPP377JGVw92Vyri-xf-jZV1UaRFBtZcPXZwLxTVA4za1v4INSlih2Si0Q5Zr56Lyi3-zkkwGtcA9ob53t_y7jQK1S71ecSuxWtq5RJKLRcb1hDpcHo5DzqbFsxiyHWeKJF2e/s320/Menu_012.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
2. Selanjutnya pilih action bar &lt;b&gt;iReport&lt;/b&gt;&amp;nbsp;dan pilih tab &lt;b&gt;Classpath&lt;/b&gt;, kemudian klik tombol &lt;b&gt;Add Jar&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGbGZc1lnUOrzS72R7cL8FipxQ4NM4Zjq2LC9tSu_jK8l8bArFFY1GmZdjPi6CcakUpF0mnP2fv6KnJavAubjiFOCOw6inng7KkHnP4jn7ao05TKKFsiT4g4qAnNnouXsvChaRelCAjvX2/s1600/Options_013.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;286&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGbGZc1lnUOrzS72R7cL8FipxQ4NM4Zjq2LC9tSu_jK8l8bArFFY1GmZdjPi6CcakUpF0mnP2fv6KnJavAubjiFOCOw6inng7KkHnP4jn7ao05TKKFsiT4g4qAnNnouXsvChaRelCAjvX2/s320/Options_013.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
3. Selanjutnya cari dan pilih lokasi file &lt;b&gt;derbyclient.jar&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLax4VcnGGeXtdagN2p3tT5b0iRtMbIdJaICxiVQgBlieKTx3ghkf3N-QJiR_Ypd6i08QKVCKGhvnx1e5CHqKna4L5HB0-IDTyY60TJOOjEeb1hjCu0snSlDzR6wuFiIZtqsliYisdzIWU/s1600/Options_018.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;269&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLax4VcnGGeXtdagN2p3tT5b0iRtMbIdJaICxiVQgBlieKTx3ghkf3N-QJiR_Ypd6i08QKVCKGhvnx1e5CHqKna4L5HB0-IDTyY60TJOOjEeb1hjCu0snSlDzR6wuFiIZtqsliYisdzIWU/s320/Options_018.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
4. Setelah menambahkan library derby client, kita bisa langsung membuat koneksi database&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMSK8p2tw0zerKEgn7COU_rAvVTZxLktYjhmd4Y0mEySZD5yroVGgpmksITtxXmuAQILnK1LfDk1_fp3WBsko8F6a5YPJjOYtMykHP-PrL9NsVXQuViKyvKuX2u6w0-YaKUVNFTTOTAoYj/s1600/Selection_015.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMSK8p2tw0zerKEgn7COU_rAvVTZxLktYjhmd4Y0mEySZD5yroVGgpmksITtxXmuAQILnK1LfDk1_fp3WBsko8F6a5YPJjOYtMykHP-PrL9NsVXQuViKyvKuX2u6w0-YaKUVNFTTOTAoYj/s1600/Selection_015.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
5. Pada dialog datasource, klik tombol &lt;b&gt;New&lt;/b&gt; (pastikan checkbox tercentang pada opsi &lt;b&gt;Empty datasource&lt;/b&gt;). Kemudian pilih &lt;b&gt;Database JDBC connection&lt;/b&gt; dan pada combobox &lt;b&gt;JDBC driver&lt;/b&gt; kita harus mengetik manual class driver yang digunakan, yakni &lt;b&gt;org.apache.derby.jdbc.ClientDriver&lt;/b&gt;, karena meskipun file jar derbyclient.jar sudah terinstall, namun driver tetap tidak muncul pada combobox.&lt;br /&gt;
Silahkan sesuaikan isian lainnya dengan database sahabat.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC1GqA4O1cmytiDdnprkOI65cREbDp3h2uy4CdRxWBuxxZfgbtt4UtnjmHV3jNkKBv5EmberWA7VsWy3H-g4-3Cp60M40LMQhSi_sYqj3M4_8Fp9RXzZP8rtX_hTgh9gVfHaIoTTHbWl5Z/s1600/Connections+-+Datasources_016.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjC1GqA4O1cmytiDdnprkOI65cREbDp3h2uy4CdRxWBuxxZfgbtt4UtnjmHV3jNkKBv5EmberWA7VsWy3H-g4-3Cp60M40LMQhSi_sYqj3M4_8Fp9RXzZP8rtX_hTgh9gVfHaIoTTHbWl5Z/s320/Connections+-+Datasources_016.png&quot; width=&quot;297&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6sLJw7rGNZV5YgGSHLqXeYF6i_9Ds92Q_THbkoWF3yMKTQegFf38_RSU3ARioFDmp0nvV1ZtdVB5JUmldel-gfRGLKz-bgioXR-mx43q9qYDeYzd9vcNCPTapBF0uuiK_qeCNxSFqSgJw/s1600/+_017.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6sLJw7rGNZV5YgGSHLqXeYF6i_9Ds92Q_THbkoWF3yMKTQegFf38_RSU3ARioFDmp0nvV1ZtdVB5JUmldel-gfRGLKz-bgioXR-mx43q9qYDeYzd9vcNCPTapBF0uuiK_qeCNxSFqSgJw/s320/+_017.png&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTFggXThbRl4N2k8Romg7D6j4129BcTI-0Z7sZjo_LrTViVHSCLBNwSzLSRZvcnhmSslLWz7GPo7LZJgD9KPBJkhJJMza5o-3TPhNWlLK_g-IJJD8NGRL40pdP0wcJ3aTHqOu0conD6bzo/s1600/+_019.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTFggXThbRl4N2k8Romg7D6j4129BcTI-0Z7sZjo_LrTViVHSCLBNwSzLSRZvcnhmSslLWz7GPo7LZJgD9KPBJkhJJMza5o-3TPhNWlLK_g-IJJD8NGRL40pdP0wcJ3aTHqOu0conD6bzo/s320/+_019.png&quot; width=&quot;268&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
6. Setelah selesai maka kita membuat report dengan database Apache Derby melalui iReport Wizard&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjO2WasZYIb01dkmYP8GQLiL5ov4sjNRH1a4tnYtvonXmlBcB6cZ9BieuAcwFcm9MsR1kqyeOkTdniqIwq9lMTb-MVsacswzroJlolPgUy23nv7lcpz3WJyLYhZEogQRznIjPZhoIfShEZ/s1600/New_020.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;247&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjO2WasZYIb01dkmYP8GQLiL5ov4sjNRH1a4tnYtvonXmlBcB6cZ9BieuAcwFcm9MsR1kqyeOkTdniqIwq9lMTb-MVsacswzroJlolPgUy23nv7lcpz3WJyLYhZEogQRznIjPZhoIfShEZ/s320/New_020.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9ttfGL9wGQVxaHzMawuYkJGTcyK92GKlys-Ts-oTkMmiJ2ySLnMUjAmsCCpdokkOg4nuAT349spoPGx6gOHvH5DhhPSyepbviNd4vbJxinc-CZodOXAKpD-gZTBo2T57SH9o7Vfos3fGg/s1600/New_021.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;247&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9ttfGL9wGQVxaHzMawuYkJGTcyK92GKlys-Ts-oTkMmiJ2ySLnMUjAmsCCpdokkOg4nuAT349spoPGx6gOHvH5DhhPSyepbviNd4vbJxinc-CZodOXAKpD-gZTBo2T57SH9o7Vfos3fGg/s320/New_021.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Happy reporting :)&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/12/ireport-membuat-koneksi-database-apache.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhraz6RTOPjPP377JGVw92Vyri-xf-jZV1UaRFBtZcPXZwLxTVA4za1v4INSlih2Si0Q5Zr56Lyi3-zkkwGtcA9ob53t_y7jQK1S71ecSuxWtq5RJKLRcb1hDpcHo5DzqbFsxiyHWeKJF2e/s72-c/Menu_012.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-4133010657201770361</guid><pubDate>Fri, 23 Nov 2012 02:21:00 +0000</pubDate><atom:updated>2013-01-15T04:20:39.066+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Swing</category><title>Java | Method Validate dan Repaint</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Beberapa waktu yang lalu saya membuat sebuah komponen yang berupa panel dengan pagination yang berisi button-button. Ketika terjadi pergantian page saya menggunakan method repaint untuk menggambar ulang panel.&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;SwingUtilities.invokeLater(new Runnable() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelPaging.repaint();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelContent.repaint();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Komponen ini berjalan dengan baik saat saya letakkan pada &lt;b&gt;JFrame&lt;/b&gt;, namun ketika saya letakkan pada &lt;b&gt;JDialog&lt;/b&gt;, hasilnya tidak seperti yang diharapkan, dimana pada page selain 1, button tidak muncul.&lt;br /&gt;
&lt;br /&gt;
Setelah googling saya menemukan petunjuk bahwa jika kita menggunakan method &lt;i&gt;remove&lt;/i&gt; maupun &lt;i&gt;removeAll&lt;/i&gt; dari &lt;b&gt;JPanel&lt;/b&gt;, maka kita harus memanggil method &lt;i&gt;validate&lt;/i&gt; dan &lt;i&gt;repaint&lt;/i&gt;.&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SwingUtilities.invokeLater(new Runnable() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Override
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void run() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelPaging.validate();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelPaging.repaint();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelContent.validate();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; panelContent.repaint();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Dan, voila...&lt;br /&gt;
Komponen saya sudah berjalan dengan semestinya, baik di &lt;b&gt;JFrame&lt;/b&gt; maupun &lt;b&gt;JDialog&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Happy coding... :)&lt;br /&gt;
&lt;br /&gt;
referensi : &lt;a href=&quot;http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint&quot; target=&quot;_blank&quot;&gt;www.stackoverflow.com&lt;/a&gt;&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/11/java-method-validate-dan-repaint.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-4051216712125983632</guid><pubDate>Thu, 15 Nov 2012 03:21:00 +0000</pubDate><atom:updated>2013-01-15T04:21:27.212+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PL/PGSQL</category><category domain="http://www.blogger.com/atom/ns#">PL/SQL</category><category domain="http://www.blogger.com/atom/ns#">PLPGSQL</category><category domain="http://www.blogger.com/atom/ns#">PLSQL</category><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">Stored Procedure</category><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>PostgreSQL | Create Language PLPGSQL ke Database</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Untuk sahabat yang sudah bekerja dan familiar dengan &lt;b&gt;Stored Procedure&lt;/b&gt;&amp;nbsp;pada &lt;a href=&quot;http://www.javanatics.com/2012/11/postgresql-membuat-nomor-urut-dengan.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;, tentunya mengetahui salah satu bahasa pemrograman yang mendukung stored procedure adalah &lt;b&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/PL/pgSQL&quot; target=&quot;_blank&quot;&gt;PLPGSQL&lt;/a&gt;&lt;/b&gt;&amp;nbsp;(biasa ditulis dengan huruf kecil, plpgsql), yakni bahasa pemrogaman SQL yang mirip dengan &lt;a href=&quot;http://en.wikipedia.org/wiki/PL/SQL&quot; target=&quot;_blank&quot;&gt;PLSQL&lt;/a&gt; milik Oracle Database.&lt;br /&gt;
&lt;br /&gt;
Secara default, baik pada Wind*ws maupun Linux/Ubuntu plpgsql ini akan diinstall kecuali jika kita menonaktifkan checkbox instalasi plpgsql pada database &lt;b&gt;template1&lt;/b&gt;.&lt;br /&gt;
FYI: PostgreSQL menggunakan database &lt;b&gt;template1&lt;/b&gt;&amp;nbsp;ini sebagai template ketika membuat database baru, sehingga baik metadata maupun bahasa pemrograman yang terinstall pada &lt;b&gt;template1&lt;/b&gt;&amp;nbsp;akan tersedia pula pada database baru, sehingga kita tidak perlu menginstall/create lagi pada database baru.&lt;br /&gt;
&lt;br /&gt;
Untuk memeriksa apakah pada database template1 sudah terinstall plpgsql kita bisa menjalankan perintah berikut pada terminal:&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;createlang -Upostgres -l template1&lt;/pre&gt;
&lt;br /&gt;
Jika sudah pada template1 sudah terinstall, maka output yang dihasilkan adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;Procedural Languages
&amp;nbsp; Name &amp;nbsp; | Trusted?
---------+----------
&amp;nbsp;plpgsql | yes&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Namun jika outputnya kosong, maka kita bisa menginstall dengan menjalankan perintah berikut:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;createlang -Upostgres plpgsql template1&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
FYI: Diperlukan superuser (-Upostgres) untuk menjalankan perintah tersebut.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sedangkan untuk database yang sudah terlanjur dibuat, kita bisa menginstall plpgsql dengan perintah ini:&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;createlang -Upostgres plpgsql [nama_database]&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy SQL coding :)&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/11/postgresql-create-language-plpgsql-ke.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6534883643914561131.post-4518196480842600297</guid><pubDate>Thu, 15 Nov 2012 02:53:00 +0000</pubDate><atom:updated>2013-01-15T04:22:17.151+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><category domain="http://www.blogger.com/atom/ns#">ROW_NUMBER</category><category domain="http://www.blogger.com/atom/ns#">ROWNUM</category><title>PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa &lt;b&gt;ROWNUM.&lt;/b&gt;&lt;br /&gt;
Bagi yang belum tahu apa itu&amp;nbsp;ROWNUM,&amp;nbsp;&lt;b&gt;ROWNUM&lt;/b&gt;&amp;nbsp;adalah&amp;nbsp;&lt;i&gt;pseudo column&lt;/i&gt;&amp;nbsp;(kolom bayangan) yang berisi nomor urut dari hasil eksekusi query.&lt;br /&gt;
&lt;br /&gt;
Sayangnya fitur ini belum tersedia pada &lt;a href=&quot;http://www.postgresql.org/&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;. Namun ada kabar gembira bagi kita pengguna&amp;nbsp;&lt;a href=&quot;http://www.javanatics.com/2012/11/postgresql-menampilkan-lokasi-data-via.html&quot; target=&quot;_blank&quot;&gt;PostgreSQL&lt;/a&gt;, dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/functions-window.html#FUNCTIONS-WINDOW-TABLE&quot; style=&quot;font-weight: bold;&quot; target=&quot;_blank&quot;&gt;window function&lt;/a&gt;&amp;nbsp;yang mengakomodasi masalah ROWNUM, yakni &lt;b&gt;ROW_NUMBER()&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Sesuai dengan &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/functions-window.html#FUNCTIONS-WINDOW-TABLE&quot; target=&quot;_blank&quot;&gt;dokumentasi&lt;/a&gt; yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa &lt;b&gt;OVER&lt;/b&gt;&amp;nbsp;yang didalamnya berisi clausa &lt;b&gt;ORDER BY&lt;/b&gt;.&lt;br /&gt;
Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja.&lt;br /&gt;
&lt;br /&gt;
Saya membuat sebuah table dengan struktur sebagai berikut&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;CREATE TABLE name (
code CHAR(1)
);&lt;/pre&gt;
&lt;br /&gt;
yang kemudian saya isi kolom code dengan alfabet mulai dari &lt;b&gt;a&lt;/b&gt; s/d &lt;b&gt;z&lt;/b&gt;&amp;nbsp;dan angka 0 (nol).&lt;br /&gt;
Sebelumnya kita lakukan query ke table name tanpa clausa &lt;b&gt;ORDER BY&lt;/b&gt;:&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT code FROM name;&lt;/pre&gt;
&lt;br /&gt;
Outputnya adalah sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;&amp;nbsp;code
------
&amp;nbsp;a
&amp;nbsp;b
&amp;nbsp;c
&amp;nbsp;d
&amp;nbsp;e
&amp;nbsp;f
&amp;nbsp;g
&amp;nbsp;h
&amp;nbsp;i
&amp;nbsp;j
&amp;nbsp;k
&amp;nbsp;l
&amp;nbsp;m
&amp;nbsp;n
&amp;nbsp;o
&amp;nbsp;p
&amp;nbsp;q
&amp;nbsp;r
&amp;nbsp;s
&amp;nbsp;t
&amp;nbsp;u
&amp;nbsp;v
&amp;nbsp;w
&amp;nbsp;x
&amp;nbsp;y
&amp;nbsp;z
&amp;nbsp;0
(27 rows)&lt;/pre&gt;
&lt;br /&gt;
terlihat bahwa urutan yang digunakan adalah urutan insert. (FYI: PostgreSQL secara default mengurutkan data sesuai dengan aktifitas DML, sehingga data terakhir yang mengalami perubahan akan berada pada urutan terbawah, kecuali kita menggunakan clausa ORDER BY).&lt;br /&gt;
&lt;br /&gt;
Selanjutnya kita buat query berikut:&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name;&lt;/pre&gt;
&lt;br /&gt;
Outputnya adalah sebagai berikut&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;&amp;nbsp;nomor_urut | code
------------+------
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 | 0
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2 | a
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3 | b
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4 | c
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5 | d
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6 | e
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 7 | f
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8 | g
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9 | h
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;10 | i
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;11 | j
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12 | k
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;13 | l
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;14 | m
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15 | n
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;16 | o
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;17 | p
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;18 | q
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;19 | r
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;20 | s
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;21 | t
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;22 | u
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;23 | v
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;24 | w
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;25 | x
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;26 | y
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;27 | z
(27 rows)&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
Dapat kita lihat dari output tersebut bahwa kolom code sudah urut sesuai clausa &lt;b&gt;ORDER BY&lt;/b&gt; pada &lt;b&gt;OVER&lt;/b&gt;, sehingga kita tidak perlu lagi untuk menambahkan clausa &lt;b&gt;ORDER BY&lt;/b&gt; setelahnya.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Sekarang bagaimana jika kita menggunakan dua clausa &lt;b&gt;ORDER BY&lt;/b&gt;. Langsung saja kita coba dengan 4 kombinasi:&lt;/div&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name ORDER BY code;
SELECT ROW_NUMBER() OVER (ORDER BY code DESC) AS nomor_urut, code FROM name ORDER BY code DESC;
SELECT ROW_NUMBER() OVER (ORDER BY code DESC) AS nomor_urut, code FROM name ORDER BY code;
SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name ORDER BY code DESC;&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Hasilnya adalah sebagai berikut:&lt;/div&gt;
&lt;div&gt;
1. Dua query pertama akan menghasilkan nomor_urut yang urut secara ascending, dan urutan kolom code sesuai dengan clausa &lt;b&gt;ORDER BY&lt;/b&gt; di belakang.&lt;/div&gt;
&lt;div&gt;
2. Sedangkan query terakhir akan menghasilkan nomor_urut yang urut secara descending, dan tetap urutan kolom code menyesuaikan dengan clausa &lt;b&gt;ORDER BY&lt;/b&gt; di belakang.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Happy querying :)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
referensi: &lt;a href=&quot;http://www.postgresql.org/docs/8.4/static/functions-window.html#FUNCTIONS-WINDOW-TABLE&quot; target=&quot;_blank&quot;&gt;www.postgresql.org&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://javanatics.blogspot.com/2012/11/postgresql-membuat-nomor-urut-dengan.html</link><author>noreply@blogger.com (Eko Suhariyadi)</author><thr:total>0</thr:total></item></channel></rss>