Replace All Non-alphanumeric in Java Using Regex
If you want to replace all non-alphanumeric using regex, you can use one of the following ways:
1
|
|
or
1
|
|
or
1
|
|
Membuat Changelog Liquibase
Saya akan mulai menggunakan tools bernama Liquibase untuk mendefinisikan skema database. Dengan Liquibase ini, skema database dapat disimpan dan dikelola versinya dalam SVC (Source Version Control) seperti Git, SVN, dll. Dia juga memiliki fitur untuk melakukan migrasi database pada saat aplikasi kita naik versi. Bila terjadi error di versi baru, Liquibase juga bisa melakukan rollback agar skema database kita kembali ke kondisi sebelum naik versi.
Skema database dalam Liquibase ditulis dalam format XML, disebut dengan istilah changelog
. Untuk project baru, ini bisa ditulis tangan manual, tetap untuk aplikasi yang sudah ada, terlalu merepotkan kalau semua table yang sudah ada harus ditulis ulang skemanya.
Untungnya Liquibase memiliki fitur untuk menulis changelog dari skema yang sudah ada. Berikut langkah-langkahnya:
- Siapkan jar liquibase dan database
- Siapkan file konfigurasi
- Jalankan liquibase
- Cek hasilnya
Siapkan jar liquibase dan database
Database yang akan saya import memiliki konfigurasi sebagai berikut:
- Jenis Database: Oracle 11g R2
- Nama Database: corebanking_simulator
- Username Database: corebanking
- Password Database: password
Untuk itu, saya siapkan dua file jar, yaitu:
File Konfigurasi
Sebetulnya semua informasi ini bisa disebutkan dalam command line argument. Tapi saya lebih suka menulis di file supaya mudah diedit. Berikut isinya.
1 2 3 4 5 6 7 |
|
Simpan file ini dengan nama liquibase.properties
dan letakkan difolder yang sama dengan kedua file jar tersebut.
Jalankan Liquibase
Mari kita jalankan proses import dengan command berikut:
1
|
|
Cek Hasilnya
Perintah diatas akan menghasilkan file liquibase-output.xml
yang isinya seperti ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
|
File diatas siap diedit dan disimpan direpository version control. Biasanya, edit yang saya lakukan:
- menggabungkan semua
createTable
menjadi satu changeset - menggabungkan semua
addForeignKeyConstraint
dancreateIndex
menjadi satu changeset. - menambahkan loader untuk file csv sebagai data awal
- mengganti nama file
Memahami Dependency Injection
Install Google-chrome Di Crunchbang
Sebelum melakukan install, terlebih dahulu kita download google-chrome (saya menggunakan 64 bit), dengan mengetikkan command
1
|
|
Output
1 2 3 4 5 6 7 8 9 10 |
|
Setelah itu, jalankan command
1
|
|
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
hmmm, ternyata banyak dependensi yang belum terinstall, setelah google, kita dapat menginstall *.deb, tanpa menghiraukan apakan dependensi nya sudah terinstall atau belom dengan menggunakan
1
|
|
Output
1 2 3 4 5 6 |
|
Setelah itu, kita install dependensi yang diperlukan, dengan mengetikkan
1
|
|
Output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
Seperti kita lihat, ternyata google-chrome-stable di hapus, jadi kita jalankan lagi
1
|
|
Uninstall Google-chrome Di Crunchbang
Untuk menginstall google-chrome di crunchbang/debian, ketikkan command berikut
1
|
|
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Lalu ketikkan
1
|
|
Output
1 2 3 4 5 6 7 8 9 10 |
|
Ini untuk memastikan anda tidak memiliki paket yang tidak perlu yang masih tersisa, dan akan menghapus file konfigurasi, menghemat sedikit space dan memastikan tidak akan mengganggu aplikasi lain.
Setting Environment Variable (PATH) Di Windows 7
Instal LiveReload Di Crunchbang
LiveReload is an application that allows you to refresh automatically your browser whenever any file gets modified, even compiling any Sass / Less / CoffeeScript files. In a nutshell, it avoids you the tedious-to-death Alt+Tab F5.
LiveReload adalah aplikasi yang dapat melakukan refresh browser secara otomatis ketika ada file berubah, bahkan ketika melakukan compile Saas/Less/CoffeScript. Ini sangat bermanfaat ketika kita melakukan pengembangan web (front-end).
Untuk menginstall LiveReload di crunchbang, ketikkan command berikut (kita mesti memiliki ruby):
1 2 |
|
Fungsi Scala Call-by-name
Umumnya, parameter-parameter fungsi adalah parameter-parameter by-value; yakni,nilai dari parameter ditentukan sebelum ia dilewatkan ke fungsi. Tapi bagaimana kalau kita perlu menulis sebuah fungsi yang menerima parameter sebuah ekspresi yang kita tidak ingin mengevaluasi nya sampai ia dipanggil didalam fungsi kita? Untuk situasi seperti ini, scala menawarkan parameter call-by-name.
mekanisme call-by-name melewatkan blok kode ke variable dan setiap saat variable diakses, blok kode akan eksekusi dan nilai akan hitung.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
disini, kita mendeklarasikan method delayed
, yang mana membutuhkan parameter call-by-name
dengan meletakkan simbol =>
antara nama variable dengan tipe variable. Ketika kode diatas di kompile dan dieksekusi, menghasilkan hasil sebagai berikut:
1 2 3 4 5 6 7 8 |
|
di sini, delayed
mencetak sebuah pesan yang menunjukkan bahwa telah masuk kedalam method. Kemudian, delayed
mencetak sebuah pesan dengan nilainya. Terakhir, delayed mengembalikan t
.
Call by Name and Call by Value, Klarifikasi Diperlukan
Pertanyaan
Seperti yang saya pahami, di Scala,fungsi dapat dipanggil dengan 2 cara:
- by-value, atau
- by-name
Misalnya, diberi deklarasi berikut, apakah kita tahu bagaimana fungsi akan dipanggil?
1
|
|
Panggil
1 2 3 |
|
Apa ketentuannya?
Jawaban
Contoh yang telah anda berikan hanya menggunakan call-by-value, jadi saya akan memberikan yang baru, sederhana, contoh yang menunjukkan perbedaan.
Pertama, mari kita asumsikan kita memiliki fungsi dengan side-effect
. Fungsi ini mencetak sesuatu dan kemudian mengembalikan sebuah Int
.
1 2 3 4 |
|
Sekarang kita akan mendefinisikan dua fungsi yang menerima argumen Int
yang persis sama kecuali yang satu membutuhkan argumen dalam gaya call-by-value (x: Int)
dan yang lainnya dalam gaya call-by-name (x: => Int)
1 2 3 4 |
|
1 2 3 4 |
|
Sekarang apa yang terjadi ketika kita memanggilnya dengan fungsi side-effect
kita?
1 2 3 4 5 6 7 8 9 10 |
|
Sehingga anda dapat melihat bahwa dalam versi call-by-value, side-effect
dari pemanggilan fungsi something()
hanya terjadi sekali. Namun, dalam versi call-by-name, side-effect
terjadi dua kali.
Hal ini karena fungsi call-by-value menghitung nilai ekspresi yang diberikan sebelum memanggil fungsi, sehingga nilai yang sama setiap kali diakses. Namun, fungsi call-by-name menghitung ulang nilai ekspresi yang diberikan setiap kali ia diakses.
Berikut ini adalah contoh dari Martin Odersky (penemu scala)
1
|
|
Kita ingin tahu evaluasi mana yang lebih cepat (langkah sedikit) dalam kondisi ini:
test (2, 3)
1 2 3 |
|
1 2 3 |
|
jadi 2 evaluasi disini sama
test(3+4, 8)
1 2 3 4 |
|
1 2 3 4 5 |
|
disini call-by-value lebih cepat
test(7, 2*4)
1 2 3 4 |
|
1 2 3 |
|
disini, call-by-name lebih cepat
test(3+4, 2*4)
1 2 3 4 5 |
|
1 2 3 4 5 |
|
lagi, keduanya sama.
Dalam kasus conton mu semua parameter akan dievaluasi sebelum fungsi tersebut dipanggil, karena kamu hanya mendefiniskan mereka by-value
. Jika kamu ingin mendefinisikan parameter kamu by-name
, kamu harus melewatkan kode block:
1
|
|
Dengan cara ini parameter x
akan dievaluasi sampai dipanggil dalam fungsi.
Simple if Statement in Java
Anggap, kita kita harus menentukan, apakah variable x
berisi data genap atau ganjil, yang biasa kita lakukan di java seperti ini
1 2 |
|
Tapi ada 1 statement di java, yang dapat mempersingkat statement di atas, namanya ternary operator
, sintaks nya seperti ini
1
|
|
contoh, cara1
diatas, jika menggunakan ternary operator
, akan menjadi
1
|
|