Rebuild Pekerjaan Tiga bulanan Dalam Dua Hari

{ Posted on 08:03 by Adib Toriq }

Kurang lebih enam bulanan yang lalu mysoftory mendapat project untuk membuat aplikasi POS (POINT OF SALES) dengan multiple kasir dan sales counter berbasis java (point terakhir itu yang bikin agak susah). Pada waktu itu kami cuman diberi waktu kurang dari dua bulan. Dengan mempertimbangkan waktu yang mepet akhirnya kami memutuskan untuk memodifikasi software open source dan menambahkan modul sales counter sesuai permintaan. Ternyata seiring berjalannya waktu ada tambahan disana-sini, sehingga pembuatan software menjadi lebih dari dua bulan. Yang menjadi masalah adalah ketika kita mencoba trial, ternyata aplikasi yang kami buat tidak secepat aplikasi awal sebelum kami modifikasi. Logikanya kan artinya ada modifikasi kami yang membuat aplikasi berjalan lambat.

Setelah mendaftar perubahan apa saja yang kami lakukan, hari ini kami akan mencoba untuk merebuild, memasukkan satu persatu modul untuk mengetahui apa yang membuat aplikasi berjalan lambat. Karena kami tidak mendokumentasikan class apa saja yang kami modifikasi (paling cuman ada tulisan “adib was here”), kami agak takut kesusahan untukl mengetahui class  apa saja yang telah menjadi “korban”. Untung ada tools yang bernama beyond compare. Tools ini berguna untuk membandingkan folder, text, dll. Dengan tools ini cukup 1 jam-an untuk mendaftar class  apa saja yang telah kami modif .

Capture

InsyaAllah kalau saya sudah tahu apa yang membuat aplikasi, akan segera saya share supaya kejadian ini tidak terulang buat teman-teman.

Photo0263

Setelah di list ada sekitar 19 class + beberapa forms yang harus direbuild. Mudah-mudahan bisa selesai hari ini. Amiiiin.

Yang bisa saya pelajari dari kejadian ini adalah jika waktu yang diberikan client tidak cukup untuk membuat aplikasi sendiri, maka project itu lebih baik dilepas. Kenapa? Karena permintaan client selalu berubah seiring kebutuhan yang mereka temui. :D. Apakah teman-teman ada tips lain agar kejadian seperti ini tidak terulang lagi?

Menampilkan Tabel Database Secara Dinamis di C#

{ Posted on 17:21 by Adib Toriq }

Pada suatu hari seorang sahabat yang sedang membuat skripsi tentang database (yang mbulet 7 turunan :D ) bertanya bagaimana menampilkan tabel dari database tanpa mengetahui ada berapa kolom disana. Aku jawab "seharusnya bisa, tapi belum pernah coba", nah inilah hasil setelah dicoba. Percobaan dilakukan dengan C# visual studio 2008 dengan sql server express 2008.

Pertama saya punya dua tabel bernama "Table1" dan "Table2" (biarin namanya g kreatif :D). Table1 memiliki dua kolom sedangnkan Table2 memiliki 3 kolom. Tapi seperti tujuan diawal, jumlah kolom tidak penting  karena yang akan saya buat adalah fungsi yang bisa meload tabel tanpa mengetahui jumlah kolomnya.

Selanjutnya supaya tampilan program ini lebih  "manusiawi". saya buat sebuah form dengan satu datagridview dan satu tombol.

form1[3]

klik dua kali pada button1(yang ada tulisan "load" itu lho) maka anda akan dibawa ke alam code, tepatnya pada event "button1_click". Agar program yang menentukan secara random apakah akan menampilkan table1 atau table2, maka saya buat code seperti ini di fungsi button1_click.

Code Snippet
  1. private void button1_Click(object sender, EventArgs e)
  2.         {
  3.             Random rnd = new Random();
  4.  
  5.             if (rnd.NextDouble() > 0.5)   //jika random bilangan lebih dari 0.5, load table1
  6.             {
  7.                 loadTabel("Table1");
  8.             }
  9.             else                          //jika kurang dari atau sama dengan 0.5 load table2   
  10.             {
  11.                 loadTabel("Table2");
  12.             }
  13.  
  14.  
  15.         }

Ok, Sekarang kita buat fungsi loadTabel yang bisa menampilkan tabel secara dinamis. Untuk menampilkan tabel di datagridview kita harus mengetahui ada berapa banyak record, dan ada berapa banyak kolom. Beberapa hal yang sifatnya "sunnah" adalah mengetahui nama kolom, dan tipe data untuk tiap kolom. Berikut adalah kode untuk fungsi loadTabel.

Code Snippet
  1.    public void loadTabel(String namaTabel)
  2.    {
  3.        String str = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Altaf\Documents\tabelDinamis.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
  4.        SqlConnection conn;
  5.  
  6.        conn = new SqlConnection(str);
  7.  
  8.        try
  9.        {
  10.            conn.Open();  // koneksi dibuka
  11.            SqlCommand cmd = conn.CreateCommand();
  12.            cmd.CommandType = CommandType.Text;
  13.            cmd.CommandText = "SELECT * FROM " + namaTabel;
  14.  
  15.       
  16.            Object[,] isi;
  17.            int banyakKolom;
  18.            int banyakRecord=0;
  19.       
  20.  
  21.            SqlDataReader reader = cmd.ExecuteReader();
  22.  
  23.            banyakKolom = reader.FieldCount;           //members penting pada kelas SqlDataReader yang befungsi mengembalikan berapa banyak kolom
  24.  
  25.            //mencari banyak record
  26.  
  27.            while (reader.Read())
  28.            {
  29.                banyakRecord++;
  30.            }
  31.  
  32.  
  33.            isi = new Object[banyakRecord, banyakRecord];
  34.  
  35.            dataGridView1.RowCount = banyakRecord;          //set banyak baris pada datagridview1
  36.            dataGridView1.ColumnCount = banyakKolom;        //set banyak kolom pada datagridview1
  37.  
  38.            reader.Close();
  39.            reader = cmd.ExecuteReader(); //di execute lagi kalai ini untuk ditampilkan
  40.  
  41.            //membuat nama kolom
  42.  
  43.            for (int i = 0; i < banyakKolom; i++)
  44.            {
  45.                dataGridView1.Columns[i].Name = reader.GetName(i); //memberikan nama pada kolom
  46.            }
  47.  
  48.  
  49.            //memasukkan isi
  50.            for (int i = 0; i < banyakRecord; i++)
  51.            {
  52.                reader.Read();
  53.                for (int j=0; j< banyakKolom; j++)
  54.                {
  55.                   
  56.                    isi[i,j] = reader[j];
  57.                    dataGridView1[j, i].Value = reader[j];  //menampilkan pada datagridview
  58.                }
  59.            }
  60.  
  61.  
  62.           
  63.        }
  64.        catch(Exception ex)
  65.        {
  66.            MessageBox.Show(ex.Message);
  67.        }
  68.  
  69.    }

Saya menggunakan looping untuk mengetahui ada berapa banyak record yang akan ditampilkan (mungkin ada teman-teman yang tahu cara yg lebih praktis?). Untuk mengetahui banyak kolom yang akan ditampilkan kita dapat menggunakan members kelas SqlDataReader yaitu FieldCount (line 23). Seringkali kita tidak hanya butuh menampilkan isi tabel, tetapi juga mengolah isinya.Karena itulah saya menyimpan isi dari tabel di variabel isi. Variabel isi adalah array dua dimensi yang bertipe data obyek, sehingga tidak terpengaruh oleh tipe data tabel yang akan di load,

Sekian, saya tunggu saran, kritik, cacian, makian, dan pujiannya :D

Cara Menjadi Kreatif

{ Posted on 08:40 by Adib Toriq }
Dua kali perjalanan naik bus balik dari surabaya bersama teman saya sahid menelurkan banyak ide kreatif. Saya percaya beberapa ide yang keluar di perjalanan itu kalau diseriusi bisa menjadi bisnis besar (dengan keuntungan lebih dari 50%). Tapi saya tidak akan membahas ide-ide bisnis itu. Yang saya penasaran adalah mengapa dan kapan ide-ide ekstrim, kreatif itu keluar? lebih lanjut lagi, bagaimana supaya ide-ide kreatif itu keluar. Bukankah pada semua bidang, kreatifitas adalah hal yang sangat penting? seniman jelas butuh kreatifitas (dan kadang kebablasan), Guru? mereka butuh kreatifitas untuk membuat metode mengajar yang mudah dipahami, Programmer? percaya atau tidak kadang mereka butuh lebih kreatif darpada seniman!! Semua butuh kreatifitas!!.

Sepertinya asyik juga kalau saya bisa tiba-tiba menjadi manusia yang kreatif (tapi g kebablasan). Oleh karena  itulah saya penasaran dan melakukan riset kecil tentang bagaimana menjadi kreatif, hasil riset itu saya tuliskan di halaman ini. Beberapa hasil riset di internet terlalu tidak masuk akal, jadi cuman yang saya rasa cukup masuk akal saja yang saya rangkum di halaman ini. Mudah-mudahan bisa bermanfaat.

Stress Free
Salah satu teman pernah berkata  bahwa ketika kita stress maka otak akan seperti dicengkram, impuls-impuls di otak akan melambat sehingga kita tidak dapat mengeluarkan jurus-jurus kreatif, bahkan bukan hanya tidak kreatif ,kadang kita berfikir bahwa kita mengalami kemunduran kemampuan otak (baca : tambah goblok). Jadi selesaikan dulu penyebab stress itu. Bagaimana kalau kita butuh kreatifitas untuk menyelesaikan penyebab stress itu? maka coba pergi ke tempat dimana anda tidak fokus pada penyebab stress.....pergi ke tempat baru.....kalau punya duit, coba pergi ke gunung, sewa villa, insyaAllah anda akan bisa lebih fokus pada pekerjaan bukan pada stress. Kalau anda sama seperti saya (baca: mahasiswa dengan budget pas-pasan), maka anda bisa ke perpustakaan kota, kafe, atau dimanapun tempat baru yang bisa mengurangi stress anda.

"Dolan"-lah Agar Kreatif
Creativity occurs when new relationships between existing elements occur and/or when new elements are brought in (bostrom 1993, Gryskiewicz 1980&1987). Dalam bahasa perjuangan artinya adalah "kreativitas muncul ketika terjadi relasi antara elemen-elemen yang sudah ada sebelumnya dengan elemen-elemen baru" (kurang lebihnya mohon maafkan penerjemah malas ini). Intinya adalah semakin banyak elemen yang ada di otak kita ini, semakin banyak ide kreatif yang dihasilkan. Elemen-elemen baru ini biasanya kita dapatkan dari luar lingkungan kita biasanya.

Berikut adalah salah contoh bagaimana ide kreatif bisa muncul karena adanya elemen-elemen baru.  Pada suatu hari ketika saya dan sahid ke fakultas peternakan, kami mengobrol dengan salah satu dosen disana, Pak Halim namanya. Awalnya pembicaraan tersebut cuman berkisar pembuatan basis data pakan ternak untuk dinas peternakan jawa timur, Tapi setelah beberapa waktu pembicaraan tersebut sampai ke formulasi pakan ternak. Para peternak mempunyai permasalahan untuk menetukan komposisi bahan yang paling murah dengan batasan komposisi tertentu, kami tahu bahwa masalah itu adalah masalah kombinatorial, dan ada beberapa metode untuk menyelesaikannya. Pak halim tidak tahu masalah kombinatorial, sama seperti kita tidak tahu masalah formulasi (sampai kita bertemu dengan salah satu mahasiswa peternakan), tapi adanya elemen-elemen baru tersebut melahirkan aplikasi yang menurut kami cukup sukses (belum lagi masalah formulasi tersebut mengantarkan PKL kami, dan skripsiku sukses). Ketika kami diajak mempresentasikan hasil aplikasi kami ke staff menteri, kami memiliki ide baru "bagaimana kalau digabungkan dengan GIS" (Sayangnya belum kesampaian untuk membuat aplikasi ini).

Jadi untuk mendapatkan ide-ide baru kita harus keluar dari lingkungan kita biasanya, So......DOLAN LAH!!!


Kadang Kita Perlu untuk menjadi Tidak Logis
Apakah anda tahu siapa orang paling kreatif di dunia? Einstein? leonardo davinci? .hmmm....kalau aku sih akan berkata "anak kecil". Masih ingat bagaimana waktu kita masih kecil dan kita menyusun strategi untuk minta dibelikan mainan? (and we never give up), atau bagaimana kita bermain perang-perangan dengan berbagai skenario? (atau kalau cewek bermain rumah-rumahan). Kenapa ketika dewasa kreatifitas jauh berkurang? karena kita terbiasa melatih otak kiri kita untuk logis dan lupa untuk melatih kreatifitas otak kanan kita. Oleh karena itu salah satu cara untuk menjadi kreatif adalah dengan mengumpulkan (dan menuliskannya) semua ide liar kita terlepas itu masuk akal atau tidak. Setelah itu baru kita pikirkan apakah ada cara logis untuk mewujudkannya.

masih banyak cara lain untuk menjadi kreatif.......mudah-mudahan lain kali bisa saya tambahkan.

Development Nasi Goreng Ala Adibun

{ Posted on 04:03 by Adib Toriq }
Apa yang terjadi ketika hasrat adib untuk men-koding tinggi, perut keroncongan, saat ini jam 3 pagi, dan gak tega mau membangunkan uswah yang tidur dengan menghabiskan resource bantal? maka ide-ide kreatif men-koding dialihkan menjadi sebuah algoritma membuat nasi goreng yang.........anggap saja kreatif (atau dapat dibaca ngawur). Karena berusaha beda dengan penulis resep yang mencoba membuat masakannya dulu baru posting di internet, adib akan menulis rencana development di internet dulu baru mencoba. tunggu update terbaru untuk rasanya. :)

Dari beberapa referensi di internet resep nasi goreng itu melibatkan kelas BawangMerah, BawangPutih, dan Kelas CabaiMerah. Karena kelas CabaiMerah tidak available, jadi kuganti dengan Sambal Botol. Secara Lengkap Kelas yang dibutuhkan untuk membuat sebuah objek nasi goreng adalah :
  • bawang putih : 2 siung (dihaluskan)
  • bawang merah : 5 biji (dihaluskan)
  • Mentega
  • Telur : 1 biji aja (mahal)
  • Sambal Botol: 2 sendok
  • Oregano
  • garam dan merica
  • separuh sendok teh royco
  • tomat dipotong tipis-tipis
  • dan jangan lupa yang paling penting..........kelas NasiPutih 2 piring
Karena Sebagian Kelas sudah disediakan oleh framework kulkas, maka kita mulai developmentnya.

Rencana development nasi goreng adalah sebagai berikut :

  1. tumis dua bersaudara bawang tersebut (bawang merah dan putih) dengan menggunakan mentega
  2. masukkan telur, buat orak arik telur.
  3. masukkan sambal botol
  4. masukkkan nasi
  5. aduk-aduk sampai merata
  6. masukkan garam, merica , dan oregano
  7. masukkan tomat

Masalah rasa......tunggu update terbaru.


Update Setelah Memasak........

n
tah karena aku yang kelaparan, atau resep ini berhasil, tapi rasanya lumayan enak. Cuman ada beberapa bug yang harus diperbaiki :
  1. Nasi goreng yang kubuat ini menggumpal, ntah kenapa.
  2. Tadi aku developmentnya pakai royko setengah sendok teh, dan itu agak "eneg". Mungkin lebih enak kalau tidak pakai.
  3. Tomatnya gak kerasa, mungkin lebih baik kalau dihidangkan setelah dimasak, bukan dimasukkan ketika dimasak.