App Release: Krimina

Krimina Android

Keamanan adalah faktor yang sangat penting dalam berbisnis. Salah satu cara meminimalkan resiko adalah dengan memeriksa latar belakang dari calon karyawan atau rekan bisnis. Namun melakukan pemeriksaan sendiri tentu bukan hal yang mudah, karena memerlukan banyak waktu dan usaha. Salah satu cara paling mudah adalah memeriksa data yang disediakan National Crime Information Center (NCIC) atau Pusat Informasi Kriminal Nasional.

Aplikasi Android Krimina dapat memudahkan Anda dalam mengakses data laporan kriminal yang bersumber langsung dari NCIC Indonesia. Selain lebih mudah dan cepat digunakan, Krimina juga menyediakan fitur yang belum tersedia di website NCIC Indonesia yaitu pencarian berdasarkan lokasi.

Krimina tersedia untuk Android phone dan tablet mulai dari versi Jelly Bean dan dapat diunduh secara gratis di Google Play Store. Tinggalkan kritik dan saran Anda di fitur review Play Store.
Get it on Google Play

PostgreSQL: Kombinasi Query LIKE dan IN

Saya memiliki dua tabel, misalkan tabel users (berisi name) dan tabel badwords (berisi word). Kebutuhannya adalah:

  1. Menemukan semua user yang namanya mengandung salah satu (atau lebih) kata yang terdapat di tabel badwords.
  2. Menemukan semua user yang namanya tidak mengandung satupun kata yang terdapat di tabel badwords.

Asumsikan semua name dan word ditulis dengan lowercase. Jika tidak, dapat menggunakan ILIKE.

Untuk masalah pertama:
SELECT *
FROM users
WHERE users.name LIKE ANY (
SELECT '%' || badwords.word || '%'
FROM badwords
)

Untuk masalah kedua:
SELECT *
FROM users
WHERE users.name NOT LIKE ALL (
SELECT '%' || badwords.word || '%'
FROM badwords
)

Penjelasan singkat:
Kita tidak dapat menggunakan IN karena IN bersifat membandingkan secara utuh, sementara kita butuh pembanding yang dapat membandingkan secara parsial (LIKE/ILIKE). Penggunaan ANY seperti OR, jika satu saja atau lebih dari subquery memenuhi kondisi LIKE, maka kondisi WHERE terpenuhi. Sementara penggunaan ALL seperti AND, harus semua terpenuhi (di kasus ini karena menggunakan NOT, berarti semua kata di subquery harus tidak ada).

Meningkatkan Performa SQL Query di Windows Phone

Pada tutorial sebelumnya, saya menjelaskan bagaimana cara menggunakan database SQLite pada app Windows Phone. Di tutorial tersebut saya melakukan copy file database dari “Package.Current.InstalledLocation” ke “ApplicationData.Current.LocalFolder”. Mengapa langkah ini diperlukan?

Ketika menambahkan external file pada Windows Phone project, biasanya developer memilih “Content” pada property “Build Action” dan “Copy always” pada property “Copy to Output Directory”. Dengan pilihan ini berarti external file tersebut akan di-copy ke dalam app package dan di-compress untuk mengurangi ukuran file yang harus di-download oleh pengguna di Windows Store. Hal ini mengakibatkan setiap kali ada query yang dijalankan, file database harus di-decompress terlebih dahulu sehingga dapat memakan waktu lama, apalagi jika ukuran file database sangat besar.

Solusi lain yang dapat dipilih adalah menggunakan pilihan property “Build Action” > “Embedded Resource”. Namun ini berarti ukuran file di Windows Store akan menjadi sangat besar karena file database tidak di-compress. Go green, save internet quota.

Dengan melakukan copy dari InstalledLocation ke LocalFolder, kita sudah melakukan decompress sebelum menjalankan query. Terlebih lagi, LocalFolder adalah persistent storage yang berarti file hasil decompress tersebut akan tetap ada meskipun app sudah ditutup dan dibuka kembali. Jangan lupa juga untuk selalu menambahkan index pada database. Dengan menggunakan database file di LocalFolder dan indexing yang tepat, performa SQL query akan meningkat tajam.