Generator nomer berpola

Problem

Dibutuhkan pola unik untuk identitas transaksi. Bisa meng-cover setidaknya satu juta transaksi. Hendak dikombinasikan dengan transaksi penawaran, sales order, invoice, dan akuntansi.

Pola harus nyaman dioperasikan. Mudah dibaca, diingat, disalin dari format digital ke fisik / sebaliknya, dientri, di-select, di-copy, di-paste, di-share, taruh semua event yg mungkin terjadi disini.

Brainstorming

Mengingat syarat “nyaman” di atas.  Maka jumlah digit menjadi sangat penting. Makin sedikit makin baik.  Misalnya: Nomer 4321 tentu lebih mudah diingat ketimbang 4456123. Nomer 2783 tentu lebih mudah dibaca dari DFDZ1X9.

Maka hendaknya kita buat pola dengan jumlah digit yang minim. Namun tetap mengcover sebanyak mungkin jumlah transaksi. Komputasi ketika kodefikasi juga harus dibuat “semurah” mungkin.  Jangan sampai sistem jadi lambat karena proses ini. Continue reading “Generator nomer berpola”

6321 Baris

Dalam pengembangan perangkat lunak diperlukan adanya pengukuran. Misalnya waktu eksekusi, besarnya file executable, jumlah baris kode, tingkat kerumitan, dan lain-lain. Dari sekian banyak besaran yang bisa diukur, kita akan lihat satu besaran, yaitu jumlah baris kode.

Banyaknya baris dalam sebuah kode program termasuk besaran yang tidak sulit untuk dihitung. Tinggal lihat semua file kode, lalu hitung semua baris dalam semua file. Demikian saja idenya. Tetapi ide sederhana itu bisa menjadi tidak sesederhana itu. Misalnnya, apakah baris kosong masuk hitungan dalam menghitung banyak baris kode. Tampaknya ide ini kurang tepat, jadi baris kosong diabaikan. Kemudian tentang baris yang berisi komentar, apakah dihitung atau tidak? Nah ini bisa menimbulkan beda pendapat. Biasanya komentar dihitung dan dipisahkan dengan baris yang berisi kode program. Selanjutnya bisa lagi dipersoalkan, apakah baris yang hanya berisi satu karakter dianggap masuk hitungan sebagai satu buah baris kode? Continue reading “6321 Baris”

Filter kolom dengan kemiripan kata

Problem

Terdapat sebuah data mentah yang berisi nama area dan beberapa kolom penting lain. Filterlah semua kota yang termasuk dalam daerah Jakarta, Bogor, Depok, Tangerang, dan Bekasi aka JABODETABEK.

Solusi panjang

SELECT * FROM area WHERE name ilike '%jakarta%';
SELECT * FROM area WHERE name ilike '%bogor%';
...
SELECT * FROM area WHERE name ilike '%bekasi%';

Ribet dan menyalahi kaidah Don’t Repeat Yourself. Harus kembali di-union agar mudah dilihat di satu tempat. Bisa juga disandingkan menggunakan operator OR seperti berikut :

select * from area where name ilike '%jakarta%' or name ilike '%bogor%' or name ilike .... dst

Tetep saja panjang dan berulang-ulang.

Solusi ringkas

SELECT
    *
FROM
    area
WHERE
    LOWER(name)
    SIMILAR TO '%(jakarta|bogor|depok|bekasi|tangerang)%';

Ringkas. hasil langsung berkumpul di satu tempat.

Tak Mudah Memberi Nama

Memberi nama adalah persoalan berat. Begitu yang saya alami. Ketika menyusun kode program ada banyak hal yang perlu diberi nama. Konstanta, variabel, fungsi, prosedur, class, object, file, direktori, dan hal lainnya yang perlu memiliki identitas. Ada banyak panduan yang sudah ditulis oleh banyak programmer berpengalaman. Langkah yang mereka tunjukkan tentu saja baik dan berguna.Tetapi permasalahannya tidak lalu hilang. Bacalah dan pahami panduan dari berbagai sumber tentang memberi nama. Prakteknya, ketika sedang berhadapan dengan keputusan memberi sebuah nama, tetap saja tak mudah.

Continue reading “Tak Mudah Memberi Nama”

Return Early

Bila ada if di baris N dan letak else jauh dari N. Dan if elsenya bersarang begitu banyak. Sudah pasti ada yang tidak beres. format penulisan seperti ini istilahnya long nested if. Format ini setidaknya punya tiga efek negatif :

1. Membuat kode sulit difahami.
2. Kemungkinan bugs lebih tinggi.
3. Proses debug menjadi lebih lama.

Sebagai contoh mari amati kode berikut. Ide kode sangatlah sederhana: kirim sms bila nomer tujuan dan pesan sudah valid . Pastikan request berasal dari alamat IP yang diizinkan. Selainnya tolak dan berikan pesan error.

Continue reading “Return Early”