Category Archives: Tips

.NET Tips Windows

Mengambil server control identifier yang dihasilkan ASP.NET

VS2008

ID yang kita berikan pada server control property di saat development biasanya tidak dapat digunakan secara sepenuhnya oleh ASP.NET. Karena itulah ASP.NET kemudian meng-generate ID sendiri yang biasanya merupakan gabungan dari ID parent dari container tempat server control itu berada dan ID dari server control itu.

Untuk mengakses nilai ID yang dibuat oleh ASP.NET secara otomatis saat runtime, kita dapat menggunakan Control.ClientID dan Control.UniqueID. Perbedaan dari kedua property ini terletak pada karakter pemisah antara bagian dari ID yang digenerate.

Sebagai contoh, misalkan kita meletakkan sebuah DropDown ber-ID DropDown1 kedalam sebuah panel ber-ID Panel1 maka

Control.ClientID-nya akan bernilai ct100_Panel1_DropDown1

dan

Control.UniqueID-nya akan bernilai ct100$Panel1$DropDown1

Indonesia Personal Tips

Gratis Iuran Tahunan Credit Card di Indonesia? Kenapa tidak…

Sebenarnya agak sedikit sebal dengan perbankan di Indonesia yang sangat mencekik leher. Apalagi setelah tinggal di Malaysia ini dan merasakan bahwa menjadi pemegang Kartu Kredit itu sangat dimanjakan dengan berbagai macam kemudian… salah satunya adalah Free Annual Fee yang mana besarannya RM130 (atau Rp300rb) untuk Primary Card Holder.

Banyak cara yang dioffer oleh bank di Malaysia untuk memperoleh Free Annual Year. Misalkan dengan berbelanja minimal 24x setahun maka Annual Fee tahun berikutnya gratis. Dikarenakan tahun pertama sudah gratis maka boleh dikatakan dapat menjadi gratis selamanya… asal rajin menggesek kartu tersebut.

Kebetulan saya adalah pengguna Citibank Credit Card semenjak entah kapan. Beberapa tahun yang lalu saya sempat menikmati potongan Annual Fee kartu kredit saya karena saya mengancam hendak menutup kartu saya.

Berbekal niatan hendak menutup kartu tersebut, pagi ini saya menelepon ke call center Citibank. Setelah verifikasi kartu akhirnya saya mengutarakan permintaan untuk `Annual Fee Waived`. Operator di ujung telepon kemudian melakukan beberapa verifikasi dan akhirnya menginformasikan bahwa kartu kredit saya termasuk yang memperoleh undangan peniadaan iuran tahunan… dan di tagihan berikutnya akan ada `Reversal Annual Fee`. Pada intinya saya tidak perlu bayar iuran tahunan tahun ini… mantap.

So… bila anda ingin untuk iuran tahunan kartu kredit anda di-waived, all you have to is ask. Bila tidak disetujui, mungkin karena credit history anda kurang meyakinkan.
Ehem… tahun depan harus telepon lagi nih.

.NET Software Engineer Tips Windows

Error `Session state has created a session id, but cannot save it because the response was already flushed by the application.` di ASP.NET

Beberapa waktu belakangan ini saya sering menemukan pesan error:

Session state has created a session id, but cannot save it because the response was already flushed by the application.

Padahal setelah check recheck di semua bagian dari page tidak ditemukan command Response.Redirect atau Server.Transfer. Bilapun ada, saya sudah menonaktifkan semua command tersebut.

Tracking di pesan error yang ditampilkan agak kurang bermanfaat, karena semua pesan error yang ada menunjukkan posisi error berada di code ASP.NET bukan di code saya.

Pesan error ini pun muncul hanya pada saat session baru kick-in. Bila page di refresh maka pesan error tersebut akan hilang.. lenyap. So, dugaan kuat error ini berhubungan dengan event Session Start. Akhirnya saya pun menilik ke arah Global Application Class (global.asax) dan melakukan tracing di event Session Start. Setelah trial dan error akhirnya terpikir untuk mencoba mengakses nilai SessionID dari object Session dengan asumsi bahwa bila nilai SessionID sama dengan null berarti session id memang belum dibuat saat aplikasi mulai. Untuk melakukannya, saya meletakkan kode:

if (string.IsNullOrEmpty(Session.SessionID))
           throw new Exception("No new session created");

pada event Session_Start di file global.asax.

Build and run the application then voila… error tersebut tidak pernah muncul lagi.

Tips Virtualization VMWare

VMWare Shared Folder dan `Project location is not trusted` error di Visual Studio

Melanjutkan dari setting Visual Studio 2008 di VMWare saya disini, ternyata masih ada pesan yang agak mengganggu setiap kali kita melakukan loading project dari VMWare Shared Folder di Visual Studio… yaitu pesan `The project location is not trusted…` alias .NET menempatkan VMWare Shared Folder sebagai lokasi yang mencurigakan. Kita dapat mem-bypass pesan ini namun lebih baik bila kita menangani permasalahannya.

Untuk menangani-nya kita perlu memberitahukan .NET bahwa VMWare Shared Folder adalah lokasi yang aman. Dan kita dapat memberitahu .NET melalui `Microsoft .NET Framework 2.0 Configuration` yang terdapat di .NET Framework 2.0 SDK yang bisa anda download disini.

Saat melakukan instalasi .NET Framework 2.0 SDK pastikan anda hanya memilih ‘Tools and Debugger`, karena hanya inilah yang anda butuhkan. Setelah proses instalasi selesai, anda akan menemukan shortcut `Microsoft .NET framework 2.0 Configuration` di bawah folder `Administrative Tools`.

  1. Buka `.NET 2.0 Configuration` tool
  2. Browse tree di panel kiri hingga `My Computer\Runtime Security Policy\Machine\Code Groups\All Code\LocalIntranet_Zone
  3. Klik kanan di LocalIntranet_Zone dan pilih `New…` untuk membuat code group baru
    • Namakan code group baru sebagai `.host` (hanya .host) dan click next
    • Pilih `URL` di dropdown tipe kondisi dari code group ini
    • Masukkan `file:\\.host\*` (hanya file:\\.host\*) ke dalam isian URL dan click next
    • Pilih `Full Trust` dari dropdown existing permision set dan click next kemudian click Finish
  4. Seharusnya saat ini anda dapat melihat `.host` di panel sebelah kiri seperti gambar dibawah ini. Keluar dari `.NET 2.0 Configuration` tool

Langkah terakhir adalah memberitahukan Internet Explorer bahwa `.host` termasuk dalam `trusted zone` dengan cara:

  1. Buka Control Panels dan buka Internet Options
  2. Buka tab `Security`, pilih `Local Intranet` dan klik tombol sites
  3. Input `file://..host/*` (hanya file://..host/*) ke isian `Add this website to zone` dan klik Add. Pastikan checkbox `Require server verification (https:)…` dalam keadaan uncheck. Klik Close
  4. Tutup Internet Options dengan mengklik tombol OK

Dan selesai. Sekarang kita dapat menggunakan Visual Studio dengan baik walaupun menggunakan VMWare Shared Folder sebagai basis project data folder kita.

VMware merubah `.host` menjadi `vmware-host` di VMware 7.0

Tips Virtualization VMWare

VMWare Shared Folder dan `Failed to start monitoring changes` error di Visual Studio

Setelah cukup lama bermain-main dengan Microsoft VirtualPC 2007 akhirnya saya grow tired dengan segala keterbatasan VirtualPC. So.. saya dump VirtualPC dan beralih ke VMWare… yang pernah saya coba di tahun 2002 namun akhirnya terpaksa saya tinggalkan karena keterbatasan hardware saat itu.

Di VMWare saya mensetup environment development berbasis Windows Server 2003 dan Visual Studio 2008. Folder data project tetap saya letakkan di komputer host untuk memudahkan backup dan sinknronisasi dengan tempat lain. Saya menggunakan `Shared Folder` untuk mengakses folder tersebut dari VMWare.

Namun ternyata Visual Studio selalu memberikan pesan error saat saya mencoba menjalankan project berbasis web. So.. kita harus melakukan workaround agar visual studio berjalan dengan  baik.

Map Network Drive

Yang pertama dilakukan… Map folder shared sebagai drive. Ini dikarenakan Visual Studio tidak suka dengan folder berawalan `.` sementara VMWare selalu meletakkan folder yang share di bawah device bernama `.host`. Masalah ini juga timbul di SVN dan diatasi dengan mengganti `.` menjadi `_`.
VMWare secara otomatis melakukan mapping folder yang di share ke drive Z.

Build Error: ‘Failed to start monitoring changes to …. web`

Nah, saat mencoba melakukan `Build` project berbasi web akan muncul pesan error ‘Failed to start monitoring changes to … web`. Penyebabnya adalah kebiasaan Visual Studio untuk memonitor perubahan di folder yang tidak bisa dilakukan karena VMWare Shared Folder. Solusi yang saya peroleh dari situs ini adalah menonaktifkan-nya dengan cara:

  1. Matikan semua instance dari Visual Studio
  2. Buka regedit dan cari key HKEY_LOCAL_MACHINE\Software\Microsoft\ASP.NET\
  3. Buat DWORD baru bernama `FCNMode` dan beri nilai 1
  4. Restart Visual Studio

Dan hilanglah pesan error tersebut bila anda mencoba melakukan build pada project web anda.

Personal Tips

Cukup menggunakan `Penghapus Pensil`

Asli sungguh kaget. Kartu ATM Maybank saya yang selalu di-reject oleh mesim ATM ternyata hanya perlu dibersihkan chip-nya.

Sebelumnya saya sudah mencoba membersihkannya dengan menggunakan kain lap, namun selalu gagal. Saat melaporkan kondisi kartu ATM saya ke CS-nya Maybank, beliau langsung mengeluarkan penghapus pensil dan menggunakannya di atas chip dari kartu tersebut. Takjub saya. Apalagi karena ternyata kartu ATM saya dapat digunakan kembali dengan baik.

Ternyata penghapus pensil itu banyak gunanya yah.

.NET Tips Windows

Kombinasi Textbox – Button sederhana dari ComboBox

[Sample dari aplikasi ini bisa di download disini.]

Kombinasi Textbox-Button biasanya banyak digunakan untuk menampilkan sebuah form dialog isian yang kemudian hasil output dari form dialog tersebut diletakkan di bagian textbox. Salah satu contoh yang paling banyak digunakan adalah SaveFileDialog, LoadFileDialog dan lain sebagainnya. Dan biasanya kita cukup meletakkan sebuah control button di sebelah control textbox, melakukan pengaturan antara kedua control tersebut (jarak, size, style etc.) dan selesailah.

 
[Textbox-Button yang berasal dari kombinasi Textbox dan Button control]

Kombinasi tersebut kemudian dijadikan UserControl sehingga dapat digunakan di berbagai project lainnya dengan lebih mudah.

ComboBox look alike

Sayangnya saya kurang puas, terutama karena kurangnya integrasi button dengan textbox. Saya ingin lebih mirip ComboBox yang merupakan standard dari Windows.Forms.

[Textbox-Button yang berasal dari ComboBox]

[1]

Yang pertama saya lakukan adalah meng-intercept event OnDropDown untuk menghindari munculnya bagian dropdown dari combobox. Ternyata tidak mudah dan masih selalu terlihat adanya bagian dari ComboBox yang muncul. Dan sayangnya nilai ini tidak boleh diberi angka 0.

protected override void OnDropDown(EventArgs e)

{

    // Make sure that no drop down shown

    this.DropDownWidth = 1;

    this.DropDownHeight = 1;

    base.OnDropDown(e);

}

[2]

Kemudian saya membuat event untuk meng-handle pada saat bagian button dari combobox di click oleh user.

public event EventHandler ButtonClick;

protected void OnButtonClick(EventArgs e)

{

    EventHandler handler = ButtonClick;

    if (handler != null)

    {

        handler(null, e);

    }

}

[3]

Terakhir, saya meng-intercept event OnClick dari ComboBox untuk menyelipkan code untuk memanggil event OnButtonClick. Hal ini bisa dideteksi dengan melakukan pemeriksaan terhadap properties DroppedDown dari ComboBox.

protected override void OnClick(EventArgs e)

{

    // Raise the ButtonClick only if the button is clicked

    if (this.DroppedDown)

    {

        this.DroppedDown = false;

        OnButtonClick(e);

    }

    base.OnClick(e);

}

[4]

Selanjutnya cukup melakukan kompilasi library dan TextBoxButton ini akan tersedia di Toolbox. Drag-drop ke bagian design dan anda dapat langsung menggunakannya.

[Pengembangan]

Masih banyak yang bisa dikembangkan. Karena TextBoxButton ini merupakan turunan dari ComboBox maka membuatnya menjadi data-aware control, padahal kita tidak memerlukannya. Serta beberapa fitur ComboBox lain yang tidak kita perlukan.

Bagi yang ingin mencobanya bisa download kode lengkap dan contoh penggunaannya disini.

.NET Tips Windows

Draw Rounded Rectangle menggunakan GDI+ di C#

Semakin sering kita melihat banyak orang yang hendak menggambar kotak dengan sudut yang melengkung atau Rounded Rectangle. Namun ternyata .NET Framework tidak menyediakan fungsi untuk menggambar rounded rectangle ini. Setelah mencoba-coba dan mencari informasi di Google, akhirnya saya menemukan dan kemudian menyempurnakan fungsi untuk menggambar rounded rectangle ini.

public void DrawRoundedRectangle(Graphics canvas, Pen pen, Rectangle rect, int RoundWidth, int RoundHeight)
{
// Make a container for our rounded rectangle figure
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
// Draw all the rounded corner
gp.AddArc(rect.X, rect.Y, RoundWidth, RoundHeight, 180, 90);
gp.AddArc(rect.X + rect.Width – RoundWidth, rect.Y, RoundWidth, RoundHeight, 270, 90); gp.AddArc(rect.X + rect.Width – RoundWidth, rect.Y + rect.Height – RoundHeight, RoundWidth, RoundHeight, 0, 90);
gp.AddArc(rect.X, rect.Y + rect.Height – RoundHeight, RoundWidth, RoundHeight, 90, 90);
// Close the drawing and make sure that all the open line are closed
gp.CloseFigure();
// draw to graphics using provided pen
canvas.DrawPath(pen, gp);
}