<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://semarang.netindonesia.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Ahmad Masykur</title><subtitle type="html">Mbangun deso</subtitle><id>http://semarang.netindonesia.net/blogs/cahnom/atom.aspx</id><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/default.aspx" /><link rel="self" type="application/atom+xml" href="http://semarang.netindonesia.net/blogs/cahnom/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2006-11-08T14:51:00Z</updated><entry><title>Silverlight for Real LOB Application</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/10/03/Silverlight-for-Real-LOB-Application.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/10/03/Silverlight-for-Real-LOB-Application.aspx</id><published>2007-10-03T02:30:00Z</published><updated>2007-10-03T02:30:00Z</updated><content type="html">&lt;p&gt;Silverlight merupakan RIA (Rich Internet Application) yang dibuat oleh Microsoft. Silverlight tidak hanya dapat digunakan untuk animasi. Dengan kombinasi Silverlight dan ASP.NET AJAX, dapat juga digunakan dalam dunia bisnis secara nyata.&lt;/p&gt;&lt;p&gt;Saya buat beberapa aplikasi pendukung SAP untuk PT. Indonesia Epson Industry menggunakan teknologi ASP.NET AJAX,&amp;nbsp; Silverlight dan ExtJs. ASP.NET AJAX digunakan untuk komunikasi anatara browser dengan webservice, Silverlight untuk presentation yang ringan dan interaktif sedangkan ExtJs (www.extjs.com) digunakan untuk membuat UI yang menarik. Kombinasi ketiga teknologi tersebut menghasilkan aplikasi yang ringan, interaktif dan menarik untuk dilihat. Berikut adalah screenshoot salah satu halaman aplikasi intranet yang saya buat untuk Epson.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;a href="http://semarang.netindonesia.net/photos/blogs_atlas/images/108/original.aspx" title="Silverlight Charting" target="_blank"&gt;&lt;img alt="Silverlight Charting" height="307" src="http://semarang.netindonesia.net/photos/blogs_atlas/images/108/425x307.aspx" title="Silverlight Charting" width="425" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Dulunya untuk membuat charting di ASP.NET saya gunakan GDI+ yang digenerate oleh ASP.NET generic http handler. Ternyata cara tersebut tidak bisa fleksibel. Akhirnya saya coba untuk beralih menggunakan Silverlight dan ternyata sungguh menakjubkan. Chart yang dibikin dengan Silverlight dapat tampilkan dengan cepat dan &amp;quot;interaktif&amp;quot;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Walaupun hanya berbekal Visual Studio 2008 Express, saya bisa menyelesaikan beberapa modul aplikasi yang dibutuhkan. Rencana semua aplikasi yang ada di Epson akan saya buat dengan ASP.NET AJAX dan Silverlight. Semoga setelah melihat hasil aplikasi yang dibikin menggunakan Silverlight ini, tahun depan Epson menganggarkan untuk membeli Visual Studio Orcas. Dan beberapa aplikasi akan saya migrasi ke .NET 3.5.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=107" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Silverlight" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Silverlight/default.aspx" /></entry><entry><title>Mashup</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/07/20/Mashup.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/07/20/Mashup.aspx</id><published>2007-07-20T03:47:27Z</published><updated>2007-07-20T03:47:27Z</updated><content type="html">&lt;p&gt;Mashup adalah website atau aplikasi web yang isinya berasal dari lebih dari satu sumber. Isi dari website ini biasanya berasal dari penyedia layanan pihak ke tiga dengan antarmuka yang disebut sebagai API. Berbeda dengan RSS yang hanya mempublikasikan berita, mashup bisa berupa peta, foto, informasi produk, berita, dll. Sebagai contoh, dengan mashup bisa mengambil foto dari flickr, menjual barang yang dijual di eBay pada situs kita, menampilkan peta dari googlemap.&lt;/p&gt; &lt;p&gt;Pembuatan website dengan mashup tidak harus mengerti pemprograman. Terdapat tool yang dapat digunakan untuk membuat website dengan mashup seperti &lt;a href="http://www.mapbuilder.net/"&gt;Mapbuilder&lt;/a&gt; atau &lt;a href="http://code.google.com/gme/index.html"&gt;Goole Mashup Editor&lt;/a&gt;. Dengan tool tersebut dapat dibuat layanan sederhana tanpa harus menulis kode.&lt;/p&gt; &lt;p&gt;Biasanya untuk memanfaatkan mashup diperlukan pendaftaran ke penyedia layanan. Sebagai contoh, untuk menggunakan layanan Google Map API, dapat dilakukan pendaftaran melalui situs &lt;a title="http://www.google.com/apis/maps/signup.html" href="http://www.google.com/apis/maps/signup.html"&gt;http://www.google.com/apis/maps/signup.html&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Untuk memulai membuat mashup, masing-masing API memiliki cara tersendiri. Silakan baca dokumentasi pada masing-masing API.&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=105" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Mendaftar Domain .web.id (Gratis)</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/06/13/Mendaftar-Domain-.web.id-_2800_Gratis_2900_.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/06/13/Mendaftar-Domain-.web.id-_2800_Gratis_2900_.aspx</id><published>2007-06-13T04:08:34Z</published><updated>2007-06-13T04:08:34Z</updated><content type="html">&lt;p&gt;Dari beberapa permintaan mengenai panduan gimana mendapatkan domain web.id, saya tulis beberapa langkah praktis untuk mendaftar.&lt;/p&gt; &lt;h3&gt;Daftar User di register.web.id&lt;/h3&gt; &lt;p&gt;Buka halaman &lt;a href="http://register.web.id"&gt;http://register.web.id&lt;/a&gt;. Jika anda belum memiliki account di register.web.id, lakukan pendafataran terlebih dahulu dengan&amp;nbsp;klik [&lt;a href="http://register.net.id/registrant?navigation=tambah"&gt;Register&lt;/a&gt;]. Isi formulir dengan benar. &lt;em&gt;Username &lt;/em&gt;boleh tidak sama dengan domain yang akan kita daftarkan.&lt;/p&gt; &lt;h3&gt;Mendaftarkan Domain Baru&lt;/h3&gt; &lt;p&gt;Setelah proses registrasi selesai, login dengan user anda. Dan kerjakan langkah-langkah berikut.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Periksa domain yang akan didaftarkan apakah masih tersedia atau tidak. Masuk ke halaman&amp;nbsp;&lt;a href="http://register.net.id/domain?navigation=check"&gt;pemeriksaan domain&lt;/a&gt;. &lt;/li&gt; &lt;li&gt;Masukkan domain yang akan diperiksa dan pilih induk domain yang diinginkan (dalam hal ini kita ingin mendaftar domain .web.id)&lt;/li&gt; &lt;li&gt;Jika domain terlah digunakan oleh orang lain, ganti nama domain yang lain. Jika domain masih tersedia, klik tombol [Register] di bawah.&lt;/li&gt; &lt;li&gt;Isi formulir pendaftaran domain dengan lengkap dan benar. &lt;br&gt;Name diisi dengan nama anda&lt;br&gt;Registrant type: Personal&lt;br&gt;Primary server diisi dengan nameserver anda (contoh: ns1.myhosting.com). Jika belum memiliki nameserver bisa diisi sembarang dulu, bisa diubah di kemudian hari.&lt;br&gt;Net Address diisi dengan IP address nameserver anda.&lt;/li&gt; &lt;li&gt;Setelah semua formulir diisi dengan benar, klik tombol [Register]&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Langkah selanjutnya adalah upload dokumen&lt;/p&gt; &lt;h3&gt;Upload Dokumen&lt;/h3&gt; &lt;p&gt;Untuk melakukan upload dokument, klik menu [&lt;a href="http://register.net.id/main?navigation=forward&amp;amp;url=document&amp;amp;menu_category=1"&gt;Document Management&lt;/a&gt;], dan klik tombol [&lt;a href="http://register.net.id/document?navigation=tambah"&gt;Create&lt;/a&gt;] untuk upload dokumen baru.&lt;/p&gt; &lt;p&gt;Pada halaman Document Submission:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Pilih domain yang telah didaftarkan (belum disetujui)&lt;/li&gt; &lt;li&gt;Pilih dokument type dengan KTP atau SIM (sesuai dengan dokument yang akan diupload)&lt;/li&gt; &lt;li&gt;Document&amp;nbsp;number diisi dengan nomor KTP atau SIM (contoh: KTP#11.1234.010171.0064)&lt;/li&gt; &lt;li&gt;Browse file hasil pindaian (scan) KTP atau SIM&lt;/li&gt; &lt;li&gt;Klik [Submit] untuk mengirim dokumen&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;Selesai&lt;/h3&gt; &lt;p&gt;Pendaftaran domain web.id selesai. Silakan tunggu beberapa waktu untuk mendapatkan persetujuan dari DepKomInfo. Domain saya dalam waktu kurang dari 24 jam disetujui. Namun teman saya yang butuh waktu satu minggu baru disetujui, tergantung dari kesibukan petugas DepKomInfo.&lt;/p&gt; &lt;p&gt;Setelah domain disetujui, maksimal butuh waktu 1x24jam untuk bisa mengakses domain baru kita. Lamanya waktu tergantung waktu&amp;nbsp;sinkronisasi domain baru dengan pengelola domain internasional.&lt;/p&gt; &lt;p&gt;Setelah domain baru selesai dibuat, tinggal setting nameserver di komputer server / shared hosting. Setting di komputer server bisa lihat dokumentasi dari masing-masing OS. Sedangkan untuk shared hosting, bisa lihat manualnya di masing-masing hosting provider.&lt;/p&gt; &lt;p&gt;Selamat melakukan registrasi di domain web.id&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=103" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Gempa di Sumbawa</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/24/Gempa-di-Sumbawa.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/24/Gempa-di-Sumbawa.aspx</id><published>2007-05-24T01:52:54Z</published><updated>2007-05-24T01:52:54Z</updated><content type="html">&lt;p&gt;Pagi ini telah terjadi gempa di daerah Sumbawa NTB pada &lt;b&gt;&lt;a href="http://www.gfz-potsdam.de/geofon/alerts/ev070524010021/"&gt;2007-05-24 01:06:24&lt;/a&gt;&lt;/b&gt;&amp;nbsp;GMT (atau sekitar pukul 09:06:24 WITA). Sumber &lt;a href="http://geofon.gfz-potsdam.de/db/eqinfo.php"&gt;http://geofon.gfz-potsdam.de/db/eqinfo.php&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Tapi yang disayangkan sampai tulisan ini ditulis belum ada data dari &lt;a href="http://www.bmg.go.id/gempaterkini.asp"&gt;BMG&lt;/a&gt;, padahal dari &lt;a href="http://www.gfz-potsdam.de/geofon/new/netabs/ge.html"&gt;jaringan GEOFON&lt;/a&gt; sudah ada beberapa saat setelah kejadian. Apa sebenarnya yang terjadi dengan BMG kita? Apa peralatan yang dimiliki sudah terlalu usang atau orang-orangnya belum bangun dari tidur?&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=101" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Ajax or AJAX?</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/12/Ajax-or-AJAX_3F00_.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/12/Ajax-or-AJAX_3F00_.aspx</id><published>2007-05-12T10:38:59Z</published><updated>2007-05-12T10:38:59Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;Ungkapan Ajax pertama kali dikenalkan oleh &lt;a href="http://blog.jjg.net/"&gt;Jesse James Garrett&lt;/a&gt; untuk mendeskripsikan gaya aplikasi web dan teknologi-teknologi yang menyertainya, sehingga dapat membuat aplikasi web yang interaktif. Pada mulanya, ungkapan Ajax yang tersebar di web adalah sebuah akronim AJAX (Asynchronous JavaScript And XML). Saat ini kenyataannya huruf "X" pada AJAX tidak representatif untuk menunjukkan format data yang digunakan&amp;nbsp;sebagai komunikasi&amp;nbsp;client dengan server web semenjak banyak aplikasi Ajax yang beralih menggunakan JSON. JSON merupakan alternatif format pertukaran data yang lebih sederhana dan lebih efisien. Daripada merubah akronim AJAX menjadi AJAJ pada aplikasi web yang lebih interaktif ini, ungkapan Ajax digunakan tetap dipertahankan namun bukanlah sebuah akronim AJAX.&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=100" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="AJAX" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/AJAX/default.aspx" /></entry><entry><title>ASP.NET Enter Key Problem</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/10/ASP.NET-Enter-Key-Problem.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/05/10/ASP.NET-Enter-Key-Problem.aspx</id><published>2007-05-10T06:47:39Z</published><updated>2007-05-10T06:47:39Z</updated><content type="html">&lt;p&gt;Pada pembuatan sebuah halaman web, terkadang terdapat beberapa input dan beberapa tombol (&lt;em&gt;button&lt;/em&gt;). Ketika&amp;nbsp;cursor focus ke sebuah textbox dan tekan tombol Enter, akan terjadi postback ke server.&amp;nbsp;Sebagai contoh bila dalam halaman terdapat dua buah textbox dan dua buah tombol separti pada kode berikut:&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d1e3e970-60c6-481b-bcc9-5307cec3c4ba" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;TextBox1&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;TextBox2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Setelah mengisi TextBox1 dan menekan tombol enter, terjadi postback ke server dan Event Click pada Button1 akan dikerjakan. Begitu *** jika TextBox2 yang diisi dan tombol Enter ditekan, Event Click pada Button1 yang dikerjakan, padahal yang diinginkan adalah Button2 yang harus dikerjakan.&lt;/p&gt;
&lt;p&gt;Untuk memecahkan masalah ini, pada ASP.NET 2.0 terdapat property DefaultButton pada Form dan Panel. Dalam kasus ini, digunakan Panel karena kedua TextBox tersebut berada dalam satu Form. Kelompokkan masing-masing inputan beserta default tombolnya ke dalam Panel.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e23d429c-e5e8-4057-9dba-f2dfbe1e034f" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Panel &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Panel1&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; DefaultButton&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;TextBox1&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Panel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Panel &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Panel2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; DefaultButton&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;TextBox2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button &lt;/span&gt;&lt;span style="color:#FF0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button2&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; runat&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; Text&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt;&lt;span style="color:#FF0000;"&gt; &lt;/span&gt;&lt;span style="color:#0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;
&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Panel&lt;/span&gt;&lt;span style="color:#0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pada ASP.NET 1.1 diperlukan trik khusus menggunakan Javascript untuk melakukan hal ini. Tambahkan code berikut pada event Load&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:6c5a230c-e570-4aa7-a34c-58b0bd4f90ad" style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;&lt;pre style="background-color:White;"&gt;&lt;div&gt;&lt;span style="color:#000000;"&gt;TextBox1.Attributes.Add(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;onkeydown&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, 
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;if(event.which || event.keyCode)&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{if ((event.which == 13) || (event.keyCode == 13)) &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{document.getElementById('&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;Button1.UniqueID&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;').click();return false;}} &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;else {return true}; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
TextBox2.Attributes.Add(&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;onkeydown&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;, 
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;if(event.which || event.keyCode)&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{if ((event.which == 13) || (event.keyCode == 13)) &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;{document.getElementById('&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;Button2.UniqueID&lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;').click();return false;}} &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;span style="color:#000000;"&gt;+&lt;/span&gt;&lt;span style="color:#000000;"&gt;
    &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;else {return true}; &lt;/span&gt;&lt;span style="color:#000000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:#000000;"&gt;);
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pada kode di atas, jika saat kursor sedang berada di TextBox{n}, ketika tombol Enter ditekan (keycode untuk tombol enter adalah 13) maka akan memanggil method &lt;code&gt;click &lt;/code&gt;pada Button{n}. Pada Firefox, &lt;code&gt;event.keyCode &lt;/code&gt;tidak berjalan dengan baik, sebagai penggantinya digunakan &lt;code&gt;event.which&lt;/code&gt;.&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=99" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Balek Maning neng Java</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/04/03/Balek-Maning-neng-Java.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/04/03/Balek-Maning-neng-Java.aspx</id><published>2007-04-03T05:07:00Z</published><updated>2007-04-03T05:07:00Z</updated><content type="html">&lt;p&gt;Wis genep sak pendak dino aku ngasto winten Jakarta. Rodo bingung sih... Wayah neng Semarang saben dino ngomong karo rencang-rencange nganggo Boso Jowo. Basan pindah menyang Jakarta, kabeh podho ngomong loe-gue... Aku ora biso kon ngomong loe-gue, lha wong biyasane ngomong sampean-aku/kulo saiki kon melu-melu loe-gue. Tinimbang kaku mendingan nganggo kamu-aku wae, luweh gambang diucapke.&lt;/p&gt;&lt;p&gt;Alhamdulillah, dino iki salah siji karyawan neng kene ono sing Wong Jowo, gelem ngomong Boso Jowo. Ya... etung-etung ijeh biso ngomong Boso Jowo neng Jakarta. Biasane wong Jowo sing wis boro menyang Jakarta podo lali karo basane dewe.&amp;nbsp;Balek-balek neng ndeso loe-gue-ne ijeh digowo-gowo. Embuh ngaya yen wis dadi wong Jakarte opo pancen bener-bener lali karo boso&amp;nbsp;emake dewe.&lt;/p&gt;&lt;p&gt;Mbuh kerjo neng Jakarta, pengene tetep Boso Jowo. Sampe anak putuku meh tak ajari Boso Jowo kromo sing bener, ojo melu-melu kanca-kancane sing urip neng Jowo tapi ora biso Boso Jowo.&lt;/p&gt;&lt;p&gt;Ono cerito meneh pas jamane aku kuliah neng Undip. Kenalan karo&amp;nbsp;cah wedok, cah Tembalang asli, tak takoni nganggo Boso Jowo Inggil ora mudeng. Ki bocah pancen ora biso Boso Jowo opo mung ethok-ethok ora biso. Aku mikir, yen ora soko awake dewe sing njogo Boso Emake, sopo meneh. Suwe-suwe Boso Jowo biso ilang.&lt;/p&gt;&lt;p&gt;Ayo podo dijogo Budoyo Jawi meniko supados mboten ilang&amp;nbsp;kanton cerito.&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=95" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Boso Jowo" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Boso+Jowo/default.aspx" /></entry><entry><title>First Day In Jakarta</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/03/26/First-Day-In-Jakarta.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/03/26/First-Day-In-Jakarta.aspx</id><published>2007-03-26T10:30:00Z</published><updated>2007-03-26T10:30:00Z</updated><content type="html">&lt;p&gt;Hari ini merupakan hari pertamaku kerja di Jakarta. Cape, sebelum subuh harus bangun, tepat setelah sholat subuh harus mandi dan sarapan dengan secangkir sereal dan roti. Mengejar waktu biar ga kesiangan dan terjebak kemacetan jalanan ibukota.&lt;/p&gt;&lt;p&gt;Sejenak setelah menunggu ankot di depan gerbang perumahan Om saya di Perumahan Wahana Pondok Gede, akhirnya datang juga angkot yang ditunggu. Saya naik angkot menuju Terminal Kampung Rambutan dengan menempuh waktu sekitar 30 menit.&lt;/p&gt;&lt;p&gt; Dilanjutkan dengan naik bus kota menuju Terminal Lebak Bulus, yach... nunggu agak lama di bus alias ngetem cari penumpang. &lt;/p&gt;&lt;p&gt;Sampai Lebak Bulus sekitar jam 7:10, saya cari angkot nomor S14, yang saya naiki ternyata bukan S14 tapi cuma nomor 14. Gak tahu huruf S di depannya itu punya arti atau tidak. Di tengah perjalanan saya bingung koq angkotnya masuk tol? Padahal sebelumnya angkot tersebut tidak masuk tol. Saya tanya sopir apakah angkotnya melewati Jl. Bintaro Permai dijawab tidak dan akhirnya saya turun.&lt;/p&gt;&lt;p&gt;Bingung juga karena belum pernah pernah menginjakkan kaki di daerah tersebut. Akhirnya saya putuskan untuk naik ojek, eh ternyata sudah deket banget, kira-kira cuma 1km saja.&lt;/p&gt;&lt;p&gt;Sesampai di kantor pulkul 7:30, pintu masih terkunci. Sambil menunggu karyawan lain sampai kantor saya duduk di ruko sebelah. Akhirnya tidak selang beberapa lama saya melihat mobil Suzuki Katana hendak parkir di depan kantor. Pak &lt;a href="http://geeks.netindonesia.net/user/Profile.aspx?UserID=2347"&gt;Agung&lt;/a&gt; keluar dari mobilnya dan mengetuk pintu kantor untuk meminta dibukakan office boy yang ada di lantai atas.&lt;/p&gt;&lt;p&gt;Sesampai di dalam ternyata masih sepi. Saya langsung ditunjukkan komputer yang akan saya gunakan. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hari ini hari pertamaku bekerja di PT. Bataviasoft. Pekerjaanku hari ini hanya install komputer dari awal (fresh) untuk diisi software developer tool, senjata andalan seorang programmer. &lt;/p&gt;&lt;p&gt;Sesaat sebelum makan siang saya diberi tugas oleh Pak Fajar untuk mempelajari dokumen project yang sedang dikerjakan saat ini. Alhamdulillah sedikit demi sedikit saya dapat memahaminya dengan baik.&lt;/p&gt;&lt;p&gt;Sehabis makan siang saya diminta mengutak-atik project yang dikerjakan tersebut. Alhamdulillah sore harinya pekerjaan hari ini sudah terselesaikan dengan baik.&lt;/p&gt;&lt;p&gt;Kesan pertama, bekerja dalam tim yang kompak sangat menyenangkan. Tidak ada kesenjangan antara senior dengan junior, antara atasan dan bawahan, antara boss dan karjawan. Semoga situasi ini dapat berlangsung sampai perusahaan ini tumbuh besar dan memiliki sebesar Microsoft saat ini. Amin.&lt;/p&gt;&lt;p&gt;Saatnya pulang, saya harus pulang biar tidak kemalaman di jalan. Soalnya angkot untuk pulang ke rumah tidak sampai malam, hanya sampai jam 21:00 saja.&amp;nbsp;&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=94" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Generics</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/03/08/Generics.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/03/08/Generics.aspx</id><published>2007-03-08T07:55:00Z</published><updated>2007-03-08T07:55:00Z</updated><content type="html">&lt;p&gt;Generics merupakan &lt;em&gt;type &lt;/em&gt;baru dalam .NET 2.0. Framework .NET 2.0 memiliki beberapa class generic dalam namespace &lt;em&gt;System.Collections.Generic&lt;/em&gt;, di antaranya &lt;em&gt;Dictionary, Queue, SortedDictionary, dan SortedList&lt;/em&gt;. Class-class tersebut bekerja seperti halnya class nongeneric dalam namespace &lt;em&gt;System.Collections&lt;/em&gt; dengan penambahan kinerja dan &lt;em&gt;type safety&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kegunaan Generics.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pada Framework .NET 1.0 dan 1.1 biasanya menggunakan class &lt;em&gt;Object &lt;/em&gt;pada parameter dan member untuk melakukan &lt;em&gt;casting &lt;/em&gt;dari dan ke class &lt;em&gt;Object&lt;/em&gt;. Ada dua kelebihan generics dibandingkan dengan class &lt;em&gt;Object&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mengurangi kesalahan saat &lt;em&gt;run-time&lt;/em&gt;&lt;/strong&gt;. &lt;em&gt;Compiler &lt;/em&gt;tidak dapat mendeteksi kesalahan jika terdapat &lt;em&gt;casting &lt;/em&gt;dari dan ke class &lt;em&gt;Object&lt;/em&gt;. Sebagai contoh, jika terdapat castring dari string ke class &lt;em&gt;Object &lt;/em&gt;dan dilakukan casting dari class &lt;em&gt;Object &lt;/em&gt;tersebut ke integer, &lt;em&gt;compiler &lt;/em&gt;tidak dapat mendeteksi kesalahan tersebut. Pada saat program dijalankan, &lt;em&gt;runtime &lt;/em&gt;.NET melempar &lt;em&gt;exception &lt;/em&gt;karena terdapat kesalahan casting dari string ke integer. Dengan menggunakan generic, compiler dapat memberitahukan kesalahan ini sebelum program dijalankan. Dengan generic juga dapat ditentukan &lt;em&gt;constraint &lt;/em&gt;untuk membatasi class-class yang digunakan pada generic, sehingga &lt;em&gt;compiler &lt;/em&gt;dapat mendeteksi &lt;em&gt;type &lt;/em&gt;yang tidak cocok.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Perbaikan Kinerja&lt;/strong&gt;. Casting membutuhkan &lt;em&gt;boxing &lt;/em&gt;(konversi dari &lt;em&gt;value type &lt;/em&gt;ke &lt;em&gt;reference type&lt;/em&gt;) dan &lt;em&gt;unboxing &lt;/em&gt;(konversi dari &lt;em&gt;reference type &lt;/em&gt;ke &lt;em&gt;value type&lt;/em&gt;) yang membutuhkan sumber daya prosesor lebih banyak dan kinerja program lebih lambat. Dengan menggunakan generic tidak diperlukan &lt;em&gt;casting &lt;/em&gt;atau &lt;em&gt;boxing &lt;/em&gt;sehingga menambah kinerja &lt;em&gt;run-time&lt;/em&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;nbsp;Untuk memahami perbedaan antara penggunaan class &lt;em&gt;Object&lt;/em&gt; dan generic, lihat contoh program berikut:&lt;/p&gt;
&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;class Obj &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object t;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object u;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Obj(Object _t, Object _u) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = _t;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u = _u;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Gen&amp;lt;T, U&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public T t;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public U u;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public Get(T _t, U _u)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = _t;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u = _u;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&amp;nbsp;&lt;/div&gt;
&lt;p&gt;Seperti terlihat pada program di atas, class &lt;span style="font-style:italic;"&gt;Obj &lt;/span&gt;memiliki dua member dengan type &lt;em&gt;Object&lt;/em&gt;. Class &lt;span style="font-style:italic;"&gt;Gen &lt;/span&gt;memiliki dua member dengan dua member dengan type T dan U. Pada class &lt;span style="font-style:italic;"&gt;Obj&lt;/span&gt;, padameter dapat diisi oleh sembarang type sedangkan pada class &lt;span style="font-style:italic;"&gt;Gen &lt;/span&gt;variable sudah ditentukan typenya sehingga meminimalkan kesalahan &lt;span style="font-style:italic;"&gt;run-time&lt;/span&gt;.&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Penggunaan Type Generic&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Ketika menggunakan Type Generic, anda harus menentukan type yang digunakan. Berikut contoh penggunaan class &lt;span style="font-style:italic;"&gt;Obj&lt;/span&gt; dan &lt;span style="font-style:italic;"&gt;Gen&lt;/span&gt;.&lt;/p&gt;
&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;// Menambahkan dua string menggunakan class Obj&lt;br /&gt;
Obj oa = new Obj(&amp;quot;Hello, &amp;quot;, &amp;quot;World!&amp;quot;);&lt;br /&gt;
Console.WriteLine((string)oa.t + (string)oa.u);&lt;br /&gt;
&lt;br /&gt;
// Menambahkan dua string menggunakan class Gen&lt;br /&gt;
Gen&amp;lt;string, string&amp;gt; ga = new Gen&amp;lt;string, string&amp;gt;(&amp;quot;Hello, &amp;quot;, &amp;quot;World!&amp;quot;);&lt;br /&gt;
Console.WriteLine(ga.t + ga.u);&lt;br /&gt;
&lt;br /&gt;
// Menambahkan double dan int menggunakan class Obj&lt;br /&gt;
Obj ob = new Obj(10.125, 2005);&lt;br /&gt;
Console.WriteLine((double)ob.t + (int)ob.u);&lt;br /&gt;
&lt;br /&gt;
// Menambahkan double dan int menggunakan class Gen&lt;br /&gt;
Gen&amp;lt;double, int&amp;gt; gb = Gen&amp;lt;double, int&amp;gt;(10.125, 2005);&lt;br /&gt;
Console.WriteLine(gb.t + gb.u);&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;Ketika program dijalankan pada aplikasi console, class Obj dan Gen menghasilkan keluaran yang sama persis. Akan tetapi kode yang menggunakan class Gen akan berjalan lebih cepat dibandingkan dengan class Obj karena tidak memerlukan boxing dan unboxing ke dan dari class Object.&lt;/p&gt;
&lt;p&gt;Contoh program berikut menunjukkan bagaimana compiler memeriksa kesalahan sebelum program dijalankan.&lt;/p&gt;
&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;// Menambahkan double dan int menggunakan class Gen&lt;br /&gt;
Gen&amp;lt;double, int&amp;gt; gc = Gen&amp;lt;double, int&amp;gt;(10.125, 2005);&lt;br /&gt;
Console.WriteLine(gc.t + gc.u);&lt;br /&gt;&lt;br /&gt;
// Menambahkan double dan int menggunakan class Obj&lt;br /&gt;
Obj oc = new Obj(10.125, 2005);&lt;br /&gt;
Console.WriteLine((int)oc.t + (int)oc.u);&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Baris terakhir pada kode diatas mengandung kesalahan yaitu nilai oc.t di-casting ke int padahal seharusnya double. Kesalahan tersebut baru diketahui setelah program dijalankan, compiler tidak memberitahukan adanya kesalahan ini pada waktu program di-compile. Dengan menggunakan generic, tentunya lebih memudahkan untuk mendeteksi dan memperbaiki kesalahan sejak dini.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Menggunakan Constraint&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Constraint digunakan untuk membatasi penggunaan parameter dengan type tertentu. Generic mendukung empat jenis constraint yaitu:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Interface.&lt;/strong&gt; Hanya mengijinkan type yang menerapkan interface tertentu untuk menggunakan generic.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Base class. &lt;/strong&gt;Hanya mengijinkan tyoe yang cocok atau diturunkan dari base class tertentu untuk menggunakan generic.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Constructor. &lt;/strong&gt;Dibutuhkan type tertentu untuk menggunakan generic untuk menerapkan constructor  tanpa parameter.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reference atau value type.&lt;/strong&gt; Dibutuhkan type tertentu untuk menggunakan generic salah satu dari reference atau value type.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pada C# digunakan klausa &lt;em&gt;where&lt;/em&gt; untuk menerapkan constraint pada generic. Sebagai contoh, class generic berikut harus digunakan hanya oleh type yang menerapkan interface &lt;em&gt;IComparable&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;class ComGen&amp;lt;T&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where T : IComparable&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public T t1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public T t2;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ComGen(T _t1, T _t2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t1 = _t1;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t2 = _t2;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public T Max()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (t2.CompareTo(t1) &amp;lt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return t1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return t1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Class di atas akan di-compile tanpa kesalahan. Namun jika klausa &lt;em&gt;where &lt;/em&gt;dihapus, compiler akan melaporkan kesalahan yang menunjukan bahwa tyoe T tidak mengandung definisi &lt;em&gt;CompareTo&lt;/em&gt;. Dengan memberikan constraint generic kepada class yang mengimplementasikan &lt;em&gt;IComparable&lt;/em&gt;, class tersebut dijamin selalu mengandung method &lt;em&gt;CompareTo&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Contoh penggunaan generic pada class library Framework .NET 2.0 adalah pada List (System.Collections.Generic.List). Berikut contoh potongan kode yang menggunakan List.&lt;/p&gt;&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;class ListTest&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public List&amp;lt;Employe&amp;gt; GetEmployes()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Employe&amp;gt; list = new List&amp;lt;Employe&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Configuration conf = WebConfigurationManager.OpenWebConfiguration();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConnectionStringSettings setting = conf.ConnectionStrings.ConnectionStrings[&amp;quot;MyConn&amp;quot;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlConnection conn = new SqlConnection(setting.ConnectionString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlCommand cmd = new SqlCommand(&amp;quot;SELECT FirstName, LastName, Age FROM Employe&amp;quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlDataReader reader = cmd.ExecuteReader();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (reader.Read()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Employe emp = new Employe(reader[&amp;quot;FirstName&amp;quot;].ToString(), reader[&amp;quot;LastName&amp;quot;].ToString(), Convert.ToInt32(reader[&amp;quot;Age&amp;quot;]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; list.Add(prs);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reader.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Employe&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string firstname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private string lastname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private int age;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string FirstName&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return firstname; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { firstname = value; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public string LastName&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return lastname; }&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { lastname = value; }&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Age&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return age; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { age= value; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Age(string _firstname, string _lastname, int _age)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; firstname = _firstname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lastname = _lastname;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; age = _age;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;  &lt;/div&gt;&lt;p&gt;Contoh program di atas memanfaatkan List (dalam namespace System.Collections.Generic) untuk menampung data Employe ke dalam collection. Class ListTest menggunakan List&amp;lt;Employe&amp;gt; sebagai nilai kembalian untuk method GetEmployes. Untuk mengakses kembalian dari method GetEmployes tidak diperlukan casting melainkan tinggal dipanggil secara langsung.&lt;/p&gt;&lt;div style="border:1px solid #7f7f7f;padding:5px;font-family:monospace,courier;"&gt;// Mengakses method GetEmployes&lt;br /&gt;ListTest lsTest = new ListTest();&lt;br /&gt;List&amp;lt;Employe&amp;gt; list = lsTest.GetEmployes();&lt;br /&gt;for (int i=0; i &amp;lt; list.Count; i++) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;Employe #{0}\n&amp;quot;, i);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;First Name : {0}\n&amp;quot;, list[i].FirstName);&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;Last Name&amp;nbsp; : {0}\n&amp;quot;, list[i].LastName);&lt;br /&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;Age&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : {0}\n&amp;quot;, list[i].Age);&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Dari contoh program di atas dapat dilihat bahwa tidak ada casting sehingga program dapat dibaca dengan mudah, kesalahan ketidakcocokan type dapat terdeteksi pada saat program di-compile serta kinerja program dapat meningkat.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=88" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Setup Microsoft SQL Server 2005 Failover Cluster</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/01/19/Setup-Microsoft-SQL-Server-2005-Failover-Cluster.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/01/19/Setup-Microsoft-SQL-Server-2005-Failover-Cluster.aspx</id><published>2007-01-19T04:13:00Z</published><updated>2007-01-19T04:13:00Z</updated><content type="html">&lt;p&gt;Langkah demi langkah pembangunan Microsoft SQL Server Fail Over Cluster telah saya dokumentasikan di http://www.masykur.erudeye.net/SQLFOC.aspx&lt;/p&gt;&lt;p&gt;Semoga pengalaman saya tersebut dapat bermanfaat bagi yang lain.&amp;nbsp;&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=87" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author></entry><entry><title>Membuat Pembasmi Brontok</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2007/01/03/Membuat-Pembasmi-Brontok.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="235128" href="http://semarang.netindonesia.net/blogs/cahnom/attachment/86.ashx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2007/01/03/Membuat-Pembasmi-Brontok.aspx</id><published>2007-01-03T10:35:00Z</published><updated>2007-01-03T10:35:00Z</updated><content type="html">&lt;p&gt;Hari ini sungguh menyedihkan... Pekerjaan terganggu akibat seranagn virus Brontok. Semua antivirus yang dimiliki termasuk &lt;a href="http://www.compactbyte.com/"&gt;CompactbyteAV&lt;/a&gt; tidak dapat mengenali varian Brontok terbaru ini. Apa boleh buat, daripada menunggu update antivirus dari vendor terlalu lama yang mungkin bisa memakan waktu 1 minggu aku coba untuk membuat pembasmi brontok menggunakan C#.&lt;/p&gt;

&lt;p&gt;Pertama adalah analisis karakteristik virus Brontok. Virus Brontok yang saya dapat menggunakan ekstensi *.exe dan *.pif yang tersebar di banyak folder dalam harddisk. File virus tersebut mengandung metadata sebagai berikut:&lt;/p&gt;

&lt;table cellpadding="3" cellspacing="0"&gt;

&lt;tr&gt;
&lt;th&gt;Item name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;


&lt;tr&gt;
&lt;td&gt;Comments&lt;/td&gt;

&lt;td&gt;Bokeph MemendeZ&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Company&lt;/td&gt;

&lt;td&gt;File Folder&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;File Version&lt;/td&gt;

&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Internal Name&lt;/td&gt;

&lt;td&gt;BRoNToK&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;

&lt;td&gt;English (United States)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Legal Trademark&lt;/td&gt;

&lt;td&gt;Virus Revolution Project&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Original File name&lt;/td&gt;

&lt;td&gt;BRoNToK.exe&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Product Name&lt;/td&gt;

&lt;td&gt;BRoNToK&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Product Version&lt;/td&gt;

&lt;td&gt;1.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Berdasarkan informasi tersebut dapat dibuat pembasmi brontok dengan metadata sebagai kunci pencarian virus. Sebelum melakukan pembersihan file virus brontok, yang harus dilakukan adalah membunuh semua proses virus yang berjalan. Dengan memanfaatkan Windows Management Instrumentation dapat diambil semua proses yang berjalan dan informasi file proses tersebut berada. Jika file proses tersebut mengandung metadata seperti di atas, proses tersebut langsung dibunuh menggunakan namespace System.Diagnostics&lt;/p&gt;&lt;p&gt;Karena keterbatasan waktu, pembasmi brontok yang dibuat hanya berfungsi menghapus semua file virus yang ada tanpa memperbaiki atribut file dan nilai registry yang dirusak oleh virus. Untuk menyembuhkan kerusakan ini dapat digunakan tool HijackThis dan unduh semua &lt;font face="Arial, Arial, Helvetica"&gt;&lt;font color="#0000ff"&gt;&lt;a href="http://www.dougknox.com/xp/file_assoc.htm"&gt;Windows&lt;sup&gt;&amp;reg; &lt;/sup&gt;XP File Association Fixes&lt;/a&gt; &lt;/font&gt;&lt;/font&gt;file dari situs &lt;a href="http://www.dougknox.com/xp/file_assoc.htm"&gt;http://www.dougknox.com/xp/file_assoc.htm&lt;/a&gt;. Tool HijactThis digunakan untuk membuka blocking RegistryTool oleh virus dan menghapus semua startup program virus. Setelah RegistryTool dapat diakses kembali, lakukan penyembuhan pada registry dengan menjalankan file *.reg yang telah diunduh tadi.&lt;/p&gt;&lt;p&gt;Kode sumber project saya sertakan dalam lampiran tulisan ini.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=86" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Brontok" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Brontok/default.aspx" /><category term="Virus" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Virus/default.aspx" /></entry><entry><title>First Look 2007 Microsoft Office System</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2006/12/21/First-Look-2007-Microsoft-Office-System.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2006/12/21/First-Look-2007-Microsoft-Office-System.aspx</id><published>2006-12-21T03:03:00Z</published><updated>2006-12-21T03:03:00Z</updated><content type="html">Ingin tahu apa saja yang ada di 2007 Microsoft Office System. Microsoft memberikan eBook setelab 213 halaman yang memaparkan masing-masing fitur dari 2007 Microsoft Office System. Bagi yang ingin tahu tentang teknologi apa yang ada di 2007 Microsoft Office System dapat unduh ebook-nya di http://download.microsoft.com/download/3/5/a/35a8cb9f-1349-4645-ac2a-49ba61834826/First-Look-2007-Microsoft-Office-System.pdf&lt;br /&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=84" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Microsoft Office" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Microsoft+Office/default.aspx" /></entry><entry><title>Solusi Crystal Report Error &quot;The maximum report processing jobs limit configured by your system administrator has been reached.&quot;</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2006/12/19/Solusi-Crystal-Report-Error-_2200_The-maximum-report-processing-jobs-limit-configured-by-your-system-administrator-has-been-reached_2E002200_.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2006/12/19/Solusi-Crystal-Report-Error-_2200_The-maximum-report-processing-jobs-limit-configured-by-your-system-administrator-has-been-reached_2E002200_.aspx</id><published>2006-12-19T12:44:00Z</published><updated>2006-12-19T12:44:00Z</updated><content type="html">&lt;p&gt;Lagi enak-enak lihat laporan, menampilkan beberapa laporan sekaligus eiittt.... koq munculnya pesan kesalahan &lt;strong&gt;&amp;quot;The maximum report processing jobs limit configured by your system administrator has been reached.&amp;quot; &lt;/strong&gt;Dengan sedikit kesabaran, dianalisis dan tanya ke Om Google, tidak lama mendapatkan jawaban atas kesalahan tersebut.&lt;/p&gt;&lt;p&gt;Setelah komputer di-start-ulang (restart) penyakit ini akan sembuh sementara namun tidak dapat memberikan solusi yang baik terutama untuk server yang sangat sibuk. Kesalahan ini timbul dikarenakan crystal report engine mengerjakan tugas yang terlalu banyak secara bersamaan. Penulisan kode yang kurang baik juga dapat menimbulkan kesalahan tersebut. Biasanya terjadi akibat Report Document tidak ditutup (close) atau dispose.&lt;/p&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=83" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Crystal Report" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Crystal+Report/default.aspx" /></entry><entry><title>Pengalaman Baru dengan Windows Vista</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2006/11/20/Pengalaman-Baru-dengen-Windows-Vista.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2006/11/20/Pengalaman-Baru-dengen-Windows-Vista.aspx</id><published>2006-11-20T07:23:00Z</published><updated>2006-11-20T07:23:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;img align="top" height="433" src="http://semarang.netindonesia.net/photos/windows_vista/images/76/original.aspx" style="width:534px;height:433px;" width="534" /&gt;&lt;/p&gt;&lt;p&gt;Alhamdulillah&lt;/p&gt;&lt;p&gt;Hari ini, pagi hari kedatanganku di kantor telah disambut oleh perangkat keras baru -- kartu grafis NVIDIA GeForce FX 5500, harddisk 140GB dan RAM 1GB. Setelah sedikit berkeringat mengganti perangkat keras dengan yang baru, aku coba untuk pasang Windows Vista RC1 yang didapat dari Majalah Chip Edisi 10/2006. Pengalaman pertama pasang Windows Vista tidak 100% mulus. Peratama saya lupa untuk meminta Procuct Key dari Microsoft. Hach.... booting lagi ke Win XP untuk browsing ke Microsoft (&lt;a href="http://www.windowsvista.com/preview/register"&gt;http://www.windowsvista.com/preview/register&lt;/a&gt;) untuk mendapatkan Product Key Windows Vista R1. Microsoft tidak berbelit-belit dalam memberikan Product Key untuk evaluasi tersebut. Saya tinggal masuk dengan Microsoft Passport dan memasukkan beberapa pilihan, Alhamdulillah Product Key secara cuma-cuma diberikan oleh Microsoft kepada saya.&lt;/p&gt;&lt;p&gt;Selanjutnya saya ulangi proses pemasangan Windows Vista dan akhirnya terpasang dengan baik tanpa hambatan yang berarti. Proses pemasangan sangat mudah, boleh dibilang lebih mudah dari Windows sebelumnya.&lt;/p&gt;&lt;p&gt;Setelah Windows Vista terpasang, saya belum menemukan keungulan yang digembar-gemborkan oleh Microsoft selama ini padahal kebutuhan minimum perangkat keras sudah terpenuhi. Setelah mencari di help, tidak sulit untuk mendapatkan referensi bagaimana mengaktifkan Aero di Windows Vista, tinggal search dan dapat deh cara mengaktifkan Aero (&lt;u&gt;&lt;font color="#0066cc"&gt;How do I get Windows Aero?&lt;/font&gt;&lt;/u&gt;).&lt;/p&gt;&lt;p&gt;Ikuti langkah-langkah dalam dokumen tersebut dan hasilnya, Aero yang sangat menarik telah aktif di desktop saya.&lt;/p&gt;&lt;p&gt;Kesan-kesan:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Microsoft berusaha meniru Tiger-nya Mac dengan Aero namun menurut saya belum bisa menggunggulinya. Microsoft hanya sebatas dapat mengekor kejayaan Mac-OS X dalam hal kecantikan animasi desktop.&lt;/li&gt;&lt;li&gt;Walaupun banyak perubahan dalam tampilan Windows Vista namun saya belum menemukan perubahan yang sangat berarti dari versi sebelumnya (mungkin dikarenakan saya belum mencobanya secara keseluruhan kali yach?)&lt;/li&gt;&lt;li&gt;Dari sisi keamanan, cukup baik. Segala sesuatu yang berkaitan dengan administrasi sistem -- instalasi, konfigurasi, update -- selalu dimintakan konfirmasi berupa jendela pop-up. Berbeda dengan pop-up versi Windows sebelumnya, jendela pop-up Vista mendisable semua jendela lainnya. Peningkatan keamanan juga memberikan dampak penurunan kenyamanan karena terlalu banyak pop-up yang muncul.&lt;/li&gt;&lt;li&gt;Masih banyak aplikasi yang tidak dapat berjalan (di-&lt;em&gt;install&lt;/em&gt;) di Vista termasuk software paling gress dari Microsoft (MS Office 2007 Beta 2, dari DVD original-nya Microsoft) walaupun sudah menggunakan &lt;em&gt;Compatibility Mode&lt;/em&gt;.&lt;/li&gt;&lt;li&gt;Ada kemajuan yang cukup melegakan ketika berselancar dengan Internet Explorer 7, saat melakukan download berkas (file) berukuran besar. Walaupun tidak terdapat perubahan tampilan dibandingkan dengan versi sebelumnya (tidak ada tombol &lt;em&gt;resume)&lt;/em&gt; namun aktifitas download dapat dilanjutkan kembali di lain waktu (&lt;em&gt;resume&lt;/em&gt;). Hal ini sangat berbeda dengan versi IE sebelumnya yang sangat kacau dalam pengelolaan download dan memerlukan download manager untuk meningkatkan keberhasilan download.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=77" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="Windows Vista" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/Windows+Vista/default.aspx" /></entry><entry><title>Transfer Logins dan Passwords Antar Instance MS SQL Server</title><link rel="alternate" type="text/html" href="http://semarang.netindonesia.net/blogs/cahnom/archive/2006/11/08/Transfer-Objek-Logins-dan-Passwords-Antar-Instance-MS-SQL-Server.aspx" /><id>http://semarang.netindonesia.net/blogs/cahnom/archive/2006/11/08/Transfer-Objek-Logins-dan-Passwords-Antar-Instance-MS-SQL-Server.aspx</id><published>2006-11-08T07:51:00Z</published><updated>2006-11-08T07:51:00Z</updated><content type="html">&lt;h4&gt;Pendahuluan&lt;/h4&gt;
&lt;p&gt;Terdapat beberapa masalah saat kita memindahkan database dari instance satu ke instance lainnya atau dari mesin server satu ke server lainnya atau saat melakukan upgrade side-by-side MS SQL Server dari versi lama ke versi yang baru. Salah satu masalah tersebut adalah objek login dan password tidak ikut ditransfer padahal semua data telah dipindahkan baik dengan cara backup restore maupun detach dan attach database. Setelah semua data selesai dipindahkan dan berusaha login ke database, akan muncul pesan:&lt;/p&gt;
&lt;div&gt;Msg 18456, Level 16, State 1&lt;br /&gt;
 Login failed for user &amp;#39;%ls&amp;#39;. &lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;Masalah ini timbul karena data login dan password tidak disimpan dalam masing-masing database namun disimpan dalam master database sehingga perlu dilakukan pemindahan secara manual.&lt;br /&gt;
&lt;/p&gt;

&lt;h4&gt;Transfer Login dan Password Antar Server MS SQL Server 7.0&lt;/h4&gt;

&lt;p&gt;Fasilitasn Transfer Objek pada SQL Server 7.0 Transformation Services (DTS) dapat digunakan untuk mentransfer login dan user antara dua buah sever tetapi tidak password login SQL Server tidak ikut ditransfer. Untuk mentransfer login dan password pada SQL Server 7.0 ke server lain yang menjalankan SQL Server 7.0 dapat dilakukan dengan langkah-langkah pada sesi &amp;quot;Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda&amp;quot;.&lt;br /&gt;
&lt;/p&gt;
&lt;h4&gt;
Transfer Login dan Password dari SQL Server 7.0 ke SQL Server 2000 atau Antar Instance SQL Server 2000&lt;/h4&gt;
&lt;p&gt;Transfer Login dan Password dari SQL Server 7.0 ke instance SQL Server 2000 atau antar dua Instance SQL Server 2000 dapat dilakukan dengan menggunakan Task Transfer Paket Login pada DTS dalam SQL Server 2000. Langkah-langkah transfer yang dilakukan sebagai berikut:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Konek ke SQL Server 2000 tujuan, pada SQL Server Enterprise Manager pindah ke Data Transformation Services, buka folder, klik-kanan &lt;span style="font-weight:bold;"&gt;Local Packages&lt;/span&gt;, dan klik &lt;span style="font-weight:bold;"&gt;New Package&lt;/span&gt;. &lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;Setelah DTS package designer terbuka, klik &lt;span style="font-weight:bold;"&gt;Transfer Logins Task &lt;/span&gt;pada menu &lt;span style="font-weight:bold;"&gt;Task&lt;/span&gt;. Lengkapi informasi tentang &lt;span style="font-weight:bold;"&gt;Source&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Destination &lt;/span&gt;dan tab &lt;span style="font-weight:bold;"&gt;Logins &lt;/span&gt;dengan tepat.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Penting:&lt;/span&gt; SQL Server 2000 tujuan tidak dapat berjalan pada SQL Server 2000 versi 64-bit. Komponen DTS untuk SQL Server 2000 versi 64-bit tidak tersedia.&lt;/p&gt;

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Catatan:&lt;/span&gt; Metode DTS akan mentransfer password namun tidak mentransfer SID yang asli. Jika login tidak dibuat dengan SID asli dan user database ditransfer ke server yang baru, user database tidak akan berhubungan dengan login. Untuk mentransfer SID asli, lakukan langkah pada sesi &amp;quot;Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda&amp;quot;.&lt;/p&gt;
&lt;h4&gt;Transfer Login dan Password Antar Instance SQL Server 2005&lt;/h4&gt;
&lt;p&gt;Informasi mengenai transfer login dan password antar instance SQL Server 2005 dapat dilihat pada artikel Microsoft Knowledge Base:&lt;/p&gt;

&lt;p&gt; &lt;a class="KBlink" href="http://support.microsoft.com/kb/918992/"&gt;918992&lt;/a&gt;
 How to transfer the logins and the passwords between instances of SQL Server 2005.&lt;/p&gt;
&lt;h4&gt;Solusi Lengkap untuk Transfer Login dan Password antar SQL Server dengan Versi yang Berbeda&lt;/h4&gt;
&lt;p&gt;Metode ini dapat diterapkan untuk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transfer login dan password dari SQL Server 7.0 ke SQL Server 7.0.&lt;/li&gt;

&lt;li&gt;Transfer login dan password dari SQL Server 7.0 ke SQL Server 2000.&lt;/li&gt;

&lt;li&gt;Transfer login dan password dari SQL Server 7.0 ke SQL Server 2005.&lt;/li&gt;

&lt;li&gt;Transfer login dan password antar server yang menjalankan instance SQL Server 2000.&lt;/li&gt;

&lt;li&gt;Transfer login dan password dari SQL Server 2000 ke SQL Server 2005.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;strong&gt;Note&lt;/strong&gt; Lihat catatan pada akhir artikel ini mengenai informasi penting tentang langkah-langkah berikut.&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Untuk mentransfer login dan password antar versi SQL Server yang berbeda, ikuti langkah-langkah berikut:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Jalankan script di bawah pada SQL Server sumber. Script ini akan membuat dua stored procedure dengan nama sp_hexadecimal dan sp_help_revlogin dalam database master. Lanjutkan langkah 2 setelah pembuatan procedure selesai.&lt;br /&gt;
&lt;strong&gt;
Catatan:&lt;/strong&gt; Procedure di bawah merupakan independen pada tabel sistem SQL Server. Struktur tabel mungkin dapat berubah antar versi SQL Server, dan pengambilan langsung dari tabel system tidak dianjurkan.&lt;br /&gt;
&lt;div style="border:1px solid #a7a7a7;padding-left:3px;background-color:#e7e7e7;font-family:courier new;font-size:small;"&gt;
&lt;pre style="font-family:courier;font-size:small;"&gt;----- Begin Script, Create sp_help_revlogin procedure -----

USE master
GO
IF OBJECT_ID (&amp;#39;sp_hexadecimal&amp;#39;) IS NOT NULL
  DROP PROCEDURE sp_hexadecimal
GO

CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar(256) OUTPUT
AS
DECLARE @charvalue varchar(256)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = &amp;#39;0x&amp;#39;
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = &amp;#39;0123456789ABCDEF&amp;#39; 
WHILE (@i &amp;lt;= @length) 
BEGIN
  DECLARE @tempint int
  DECLARE @firstint int
  DECLARE @secondint int
  SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
  SELECT @firstint = FLOOR(@tempint/16)
  SELECT @secondint = @tempint - (@firstint*16)
  SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
  SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO

IF OBJECT_ID (&amp;#39;sp_help_revlogin&amp;#39;) IS NOT NULL
  DROP PROCEDURE sp_help_revlogin
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name    sysname
DECLARE @xstatus int
DECLARE @binpwd  varbinary (256)
DECLARE @txtpwd  sysname
DECLARE @tmpstr  varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)

IF (@login_name IS NULL)
  DECLARE login_curs CURSOR FOR 
    SELECT sid, name, xstatus, password FROM master..sysxlogins 
    WHERE srvid IS NULL AND name &amp;lt;&amp;gt; &amp;#39;sa&amp;#39;
ELSE
  DECLARE login_curs CURSOR FOR 
    SELECT sid, name, xstatus, password FROM master..sysxlogins 
    WHERE srvid IS NULL AND name = @login_name
OPEN login_curs 
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
IF (@@fetch_status = -1)
BEGIN
  PRINT &amp;#39;No login(s) found.&amp;#39;
  CLOSE login_curs 
  DEALLOCATE login_curs 
  RETURN -1
END
SET @tmpstr = &amp;#39;/* sp_help_revlogin script &amp;#39; 
PRINT @tmpstr
SET @tmpstr = &amp;#39;** Generated &amp;#39; 
  + CONVERT (varchar, GETDATE()) + &amp;#39; on &amp;#39; + @@SERVERNAME + &amp;#39; */&amp;#39;
PRINT @tmpstr
PRINT &amp;#39;&amp;#39;
PRINT &amp;#39;DECLARE @pwd sysname&amp;#39;
WHILE (@@fetch_status &amp;lt;&amp;gt; -1)
BEGIN
  IF (@@fetch_status &amp;lt;&amp;gt; -2)
  BEGIN
    PRINT &amp;#39;&amp;#39;
    SET @tmpstr = &amp;#39;-- Login: &amp;#39; + @name
    PRINT @tmpstr 
    IF (@xstatus &amp;amp; 4) = 4
    BEGIN -- NT authenticated account/group
      IF (@xstatus &amp;amp; 1) = 1
      BEGIN -- NT login is denied access
        SET @tmpstr = &amp;#39;EXEC master..sp_denylogin &amp;#39;&amp;#39;&amp;#39; + @name + &amp;#39;&amp;#39;&amp;#39;&amp;#39;
        PRINT @tmpstr 
      END
      ELSE BEGIN -- NT login has access
        SET @tmpstr = &amp;#39;EXEC master..sp_grantlogin &amp;#39;&amp;#39;&amp;#39; + @name + &amp;#39;&amp;#39;&amp;#39;&amp;#39;
        PRINT @tmpstr
      END
    END
    ELSE BEGIN -- SQL Server authentication
      IF (@binpwd IS NOT NULL)
      BEGIN -- Non-null password
        EXEC sp_hexadecimal @binpwd, @txtpwd OUT
        IF (@xstatus &amp;amp; 2048) = 2048
          SET @tmpstr = &amp;#39;SET @pwd = CONVERT (varchar(256), &amp;#39; + @txtpwd + &amp;#39;)&amp;#39;
        ELSE
          SET @tmpstr = &amp;#39;SET @pwd = CONVERT (varbinary(256), &amp;#39; + @txtpwd + &amp;#39;)&amp;#39;
        PRINT @tmpstr
	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
        SET @tmpstr = &amp;#39;EXEC master..sp_addlogin &amp;#39;&amp;#39;&amp;#39; + @name 
          + &amp;#39;&amp;#39;&amp;#39;, @pwd, @sid = &amp;#39; + @SID_string + &amp;#39;, @encryptopt = &amp;#39;
      END
      ELSE BEGIN 
        -- Null password
	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
        SET @tmpstr = &amp;#39;EXEC master..sp_addlogin &amp;#39;&amp;#39;&amp;#39; + @name 
          + &amp;#39;&amp;#39;&amp;#39;, NULL, @sid = &amp;#39; + @SID_string + &amp;#39;, @encryptopt = &amp;#39;
      END
      IF (@xstatus &amp;amp; 2048) = 2048
        -- login upgraded from 6.5

        SET @tmpstr = @tmpstr + &amp;#39;&amp;#39;&amp;#39;skip_encryption_old&amp;#39;&amp;#39;&amp;#39; 
      ELSE 
        SET @tmpstr = @tmpstr + &amp;#39;&amp;#39;&amp;#39;skip_encryption&amp;#39;&amp;#39;&amp;#39;
      PRINT @tmpstr 
    END
  END
  FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
  END
CLOSE login_curs 
DEALLOCATE login_curs 
RETURN 0
GO
 ----- End Script -----

&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;Setelah stored procedure &lt;strong&gt;sp_help_revlogin&lt;/strong&gt; dibuat, jalankan procedure &lt;strong&gt;sp_help_revlogin&lt;/strong&gt; dari Quert Analyzer pada server sumber. Stored procedure &lt;strong&gt;sp_help_revlogin&lt;/strong&gt; dapat digunakan pada SQL Server 7.0 dan SQL Server 2000. Keluaran stored procedure &lt;strong&gt;sp_help_revlogin&lt;/strong&gt; adalah script login untuk membuat login dan password dengan SID asli. Simpan keluaran, dan kemudian paste dan jalankan pada Query Analyzer SQL Server tujuan. Contoh:&lt;br /&gt;
&lt;div style="border:1px solid #a7a7a7;padding-left:3px;background-color:#e7e7e7;font-family:courier new;font-size:small;"&gt;
&lt;pre&gt;EXEC master..sp_help_revlogin
&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
Sampai sejauh ini proses pemindahan login dan password berjalan lancar.
Informasi lebih jauh dapat dilihat pada &lt;a href="http://support.microsoft.com/kb/246133/"&gt;http://support.microsoft.com/kb/246133/&amp;nbsp;&lt;/a&gt;&lt;img src="http://semarang.netindonesia.net/aggbug.aspx?PostID=75" width="1" height="1"&gt;</content><author><name>cahnom</name><uri>http://semarang.netindonesia.net/members/cahnom.aspx</uri></author><category term="SQL Server" scheme="http://semarang.netindonesia.net/blogs/cahnom/archive/tags/SQL+Server/default.aspx" /></entry></feed>