Ismail Hamzah

"in harmonia progressio"
See also: Other Geeks@INDC
Error (Blue screen 0x0000007B) when installing Windows XP on Compaq Pressario CQ20

Kegembiraan sedikit terganggu dikarenakan error 0x0000007B yang muncul ketika meng-install Windows XP. Saya gembira karena berkat kebaikan hati istri saya maka saya dapat memiliki laptop baru yang super canggih. Kebahagiaan sedikit terganggu karena ada blue screen error ketika coba ngin-stall windows xp di laptop baru itu. Berikut adalah kronologis dari error tersebut dan bagaimana usaha yang saya lakukan untuk terbebas dari error tersebut. (note: semoga ada yang terbantu dengan cerita ini dan semoga juga ada orang yang lebih berkompeten di bidang per-hardware-an ini yang mau memberi komentar)

Sepulang dari "Ratu Plaza", kardus laptop "Compaq Pressario CQ20" saya bongkar. Processor 2.0 GHz dan RAM 3 GB berhasil membuat muka saya berseri-seri, soalnya buat saya spek tersebut sudah terbilang super canggih. Saya kemudian menyalakan laptop tersebut dan langsung meng-install windows XP. Tanpa berfikir buruk sebelumnya, saya tungguin proses loading file-file untuk proses installasi. "Beung!!!" tiba-tiba muncul blue screen error, sontak mulut bergumam: "waduh kenapa niy?". Masih tanpa berfikir buruk sangka saya bergumam lagi: "oh.. mungkin masih belum panas kali" (halah ada2 aja) sambil mengulangi proses installasi.

"Beung!!!" buset muncul lagi!!!. dengan hati yang mulai "bete" saya ulangi lagi dan lagi tapi tetep hasilnya, buruk!!!. Hati menggerutu: "kacau niy tukang laptop, katanya barang bagus". Mau dibalikin lagi ke Ratu Plaza sudah kemaleman. Dengan hopeless, coba menelusuri BIOS dan berharap ada setingan yang bisa dilakukan. Setelah bolak-balik dilihat, perhatian kemudian terfokus pada tulisan "SATA Device Mode". Setelah merenung dan flashback ke masa lalu ketika mulai pertama kali bongkar-bongkar komputer dan bolak-balik nginstall windows bajakan, saya teringat bahwa setingan untuk hardisk itu selalu ke "IDE". Tapi kenapa ini ke AHCI, apa pula AHCI ini?. Daripada pusing, enggak ada salahnya untuk nyobain proses jaman jadul yaitu IDE yang dipilih. Alasan teknis dibelakang semua ini? blank, enggak tau.

Proses installasi windows XP saya coba lagi. Alhamdulillah..!!! berhasil!!! cihuy.. yipie.. yes yes yes akhirnyaaa. Masih enggak tahu alasan teknis dibalik semua ini, enggak apa-apa, yang penting sudah bisa diinstall. Sambil nunggu nginstall beres, coba untuk googling2 dikit dan menuliskannya di blog biar inget terus. Menurut hasil googling, katanya, laptop jaman sekarang sudah dilengkapi hardisk berteknologi SATA dan si SATA itu katanya enggak dikenali oleh si windows. Saya masih belum "mudeng" juga, enggak apa-apa lah, yang penting proses installasi di laptop sudah bisa jalan. Berikut adalah beberapa artikel yang berhasil saya temukan ketika googling berkaitan dengan hal diatas:

1. Microsoft

2. Anugrah Pratama Blog

3. Wikipedia

4. Tom's Hardware

Share this post: | | | |
Posted: Apr 02 2009, 10:51 PM by go2ismail | with 15 comment(s)
Filed under:
Implementing Single Sign On Using Cookies

Teknik Single Sign On akan memungkinkan user untuk hanya melakukan satu kali login/logout saja. Misalkan Anda mengoperasikan tiga buah portal yang masing2 memiliki fungsionalitas, tujuan dan teknologi yang berbeda-beda, maka Anda dapat menyediakan kemudahan kepada user dengan cara membiarkan user untuk hanya melakukan satu kali login saja untuk dapat menggunakan ketiga buah portal tadi. Login pada portal A, dan kemudian otomatis ter-login juga pada portal B dan portal C. Contoh yang paling dekat adalah single sign on antara portal geeks dan WSS-Id yang telah dijelaskan oleh welly di blognya.

Seperti yang telah umum dilakukan, cookies digunakan untuk memelihara informasi seorang user, sesaat setelah dia berhasil di authentikasi. Dengan bermodalkan premis diatas, maka dapat dikatakan bahwa Single Sign On dapat diimplementasi dengan menggunakan cookie dengan cara membuat sebuah cookie yang dikenali dan dapat diakses oleh portal-portal lainnya. Dibawah adalah contoh gambaran implementasi Single Sign On:

AP adalah kependekan dari authentication provider. AP dapat berupa sebuah server yang akan melakukan proses authentikasi yang mana hasil dari authentikasi dapat dikirimkan via HTTP Response. Sedangkan informasi2 credentials yang hendak di authentikasi dapat dikirimkan via HTTP Request. Informasi yang dikirim via HTTP Response dapat digunakan untuk membuat sebuah cookie yang direncanakan untuk dapat diakses dan dikenali oleh portal2 lainnya.

Proses Login

Secara sederhana, proses login dapat diisi oleh code yang melakukan HTTP Request pada authentication provider. Informasi credentials dapat dikirimkan via HTTP Request tersebut. Authentication provider kemudian dapat diatur untuk dapat mengirimkan informasi2 tertentu via HTTP Response yang mana informasi2 tersebut dapat digunakan untuk membuat cookie. HTTP Request dapat dilakukan dengan menggunakan System.Net.HttpWebRequest (Tolong bedakan dengan System.Web.HttpWebRequest). System.Net.HttpWebRequest digunakan karena dalam skenario SSO ini, portal adalah merupakan sebuah client yang hendak mengakses AP.

private void SSOLogin()

{

//data request

string postData = "id=id&pwd=password";

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

byte[] data = encoding.GetBytes(postData);

//make a request

string ap_url = "http://josso.batujajar.co.id/josso.do";

System.Net.HttpWebRequest req = System.Net.WebRequest.Create(ap_url);

req.Method =
"POST";req.ContentType = "application/x-www-form-urlencoded";

req.ContentLength = data.Length;

//send the request

System.IO.Stream reqStream = req.GetRequestStream();

reqStream.Write(data, 0, data.Length);

reqStream.Close();

//catch the response

System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();

System.IO.
StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());string results = sr.ReadToEnd();

sr.Close();

//create cookie

HttpCookie cookie = new HttpCookie("xyz");

cookie.Domain = ".batujajar.co.id";

cookie.Path = "/";cookie.Name = "xyz";

cookie.Value = GetTicketID(results);

cookie.Expires = System.
DateTime.Now.AddDays(+1);

Response.Cookies.Add(cookie);

}

private string GetTicketID(string str)

{

//get the ticket id

}

kode diatas akan melakukan HTTP Request pada authentication provider (yang kebetulan di develop dengan menggunakan java sehingga berakhiran .do). HTTP Response kemudian digunakan untuk membuat cookie. Agar cookie dikenali dan dapat diakses oleh domain tertentu saja, maka property Domain dari cookie diisi.

Proses Logout

Peristiwa yang terjadi pada proses logout adalah dengan cara menghancurkan cookie sehingga semua portal tidak dapat menemukan cookie dan kemudian portal akan logout. Cookie dihancurkan dengan cara meng-ekspire-kan cookie tersebut.

private void SSOLogout()

{

//...

cookie.Expires = System.DateTime.Now.AddDays(-1);

//...

}

Share this post: | | | |
Posted: Mar 13 2009, 09:34 AM by go2ismail | with 7 comment(s)
Filed under:
How to Add a New Website in IIS 5

Menambahkan sebuah website baru via IIS 6 adalah mudah, tinggal klik sini dan klik sana maka semua beres. Namun berbeda kasusnya di IIS 5 karena IIS 5 tidak memiliki semua kemewahan yang dimiliki IIS 6 tersebut. yang termudah bisa dilakukan di IIS 5 adalah menambahkan virtual directory. Namun, jika virtual directory bukan merupakan tujuan yang hendak dicapai maka menambahkan sebuah website baru di IIS 5 ternyata dimungkinkan.

Beruntung saya menemukan blognya Mukul Agarwal dalam usaha peng-googlingan saya. Dalam blog tersebut dipaparkan bagaimana caranya untuk menambahkan sebuah website baru pada IIS 5. Ide yang digunakan adalah membuat sebuah website baru dengan menggunakan utilitas adsutil.vbs lalu kemudian menerapkan setingan2 "default website" terhadap si website baru tersebut dengan cara meng-copy "default website" dan mem-paste-kannya ke website baru. Website dikenali melalui service W3SVC. Identitas si website ditunjukan oleh angka yang mengiringi service W3SVC, sehingga sebagai contoh "default website" dapat dicirikan dengan W3SVC/1. angka satu muncul karena, "default website" adalah website kesatu yang ada di IIS. Untuk mencirikan website baru, bisa digunakan angka 2 (atau angka lainnya) sehingga dicirikan dengan W3SVC/2.

berikut adalah langkah-langkah yang dipaparkan di blognya Mukul Agarwal untuk menambahkan sebuah website baru di IIS 5:

1. buka IIS manager dan kemudian "stop" default website.

2. buka command prompt (cmd) dan masuk ke folder "c:\inetpub\adminscripts"

3. untuk melihat semua website yang telah ada di IIS, ketikan "adsutil.vbs enum w3svc/p" di cmd.

4. untuk membuat website baru di IIS, ketikan "adsutil.vbs create w3svc/2" di cmd. note: angka yang digunakan tidak harus angka 2, angka tersebut adalah index yang akan mencirikan website baru yang hendak dibuat.

5. copy-kan struktur dan setingan "default website" pada website baru dengan cara mengetikan "adsutil.vbs copy W3SVC/1 W3SVC/2" di cmd.

6. dengan menggunakan IIS manager, rename website yang baru terbuat dengan nama apapun yang diinginkan dan kemudian tembakan "Home Directory"  ke folder yang digunakan untuk menampung file website.

 

Share this post: | | | |
Posted: Mar 12 2009, 03:24 PM by go2ismail | with 1 comment(s)
Filed under:
DotNetNuke: 'dbo.GetPortalAliasByPortalID' doesn't exist

Sering kali saya lupa dengan error yang satu ini yaitu: 'dbo.GetPortalAliasByPortalID' doesn't exist. Error ini selalu muncul ketika saya coba memindahkan sebuah portal DNN dari satu mesin ke mesin lainnya. Saya memindahkan dengan cara mem-backup Databasenya dan kemudian me-restore-nya di mesin yang baru. Karena panik, saya suka nanya solusinya ke mbah nya DNN di londo sono, dan dia selalu datang dengan jawaban yang mantap. Agar saya tidak terus2an nanya ke si mbah maka saya tulis aja, biar inget terus dan mungkin bisa jadi pengingat juga buat temen2 DNN developer yang lain.

Jika melihat Error ini: 'dbo.GetPortalAliasByPortalID' doesn't exist. make sure untuk melakukan hal2 di bawah ini:

1. Please make sure: user, password, nama server dan nama database yang ditulis di web.config adalah benar. harus benar-benar di make sure bahwa informasinya benar dan benar cara nulisnya. coba di test informasi user dan password nya dengan cara login ke MS SQL Management Studio dengan menggunakan user dan password yang bersesuaian.

2. Please make sure: si user sudah menjadi db_owner dari database yang bersangkutan. 'dbo.GetPortalAliasByPortalID' doesn't exist belum berarti stored procedurenya enggak ada, tetapi si user tidak dapat meng-akses stored procedure tersebut. Coba cek kembali properties si user dan kemudian lihat di User Mapping nya. Coba pastikan untuk Database yang bersesuaian si user sudah menjadi db_owner nya.

sudah saya tuliskan. mudah-mudahan saya tidak lupa-lupa lagi. amin. :-)

 

Share this post: | | | |
Posted: Feb 17 2009, 10:12 AM by go2ismail | with 1 comment(s)
Filed under:
Acknowledgment: Romi Satria Wahono

Hari minggu (21 Desember 2008) kemaren merupakan hari yang luar biasa buat saya. Saya bisa bertemu langsung "face to face" dengan seseorang yang memang dari dulu pengen saya temui. Saya bahkan, harus nelpon istri saya dulu untuk ijin tidak pulang ke bandung, agar bisa menghadiri sebuah event yang digelar oleh temen-temen dari MIFTA yang menghadirkan "sang pedjoeang" sebagai keynote speaker.

Adalah dia, Romi Satria Wahono,  "sang pedjoeang" yang ingin saya temui secara langsung sudah sejak lama. Kenapa harus bung Romi ? yes, for me, he is a living legend. Bagaimana tidak ? melalui "perdjoeangannya" lah situs www.ilmukomputer.com yang fenomenal itu lahir. Sebagai solusi murah dan mudah dalam hal memperoleh pengetahuan yang mana, di negara kita yang tercinta ini, murah dan mudah adalah dua komponen yang sangat langka sekali. Saya jadi teringat ketika awal masa kuliah dulu, saat-saat ketika saya mulai memiliki sedikit ketertarikan ke dunia IT. Jalan-jalan ke salah satu toko buku paling terkenal di negeri ini, melihat-lihat koleksi buku komputer yang mereka miliki. Namun sayang, harga yang tertampang di buku tidak terlalu bersahabat dengan dompet dan segala isinya yang saya miliki. Beruntung, salah satu teman saya, memperkenalkan www.ilmukomputer.com pada saya dan alhamdulillah.. the magic starts to work :-)

Hari minggu itu (21 Desember 2008), Romi Satria Wahono "membeberkan" semua rahasia suksesnya dengan cara merangkumkan perjalanan "perdjoeangan" yang telah dilalui. Rangkuman cerita dimulai dari kedatangan "sang pedjoeang" ke tanah air dan diakhiri dengan cerita kondisi terakhir "sang pedjoeang" per desember 2008. Sungguh beruntung sekali saya bisa menghadiri dan mendengarkan paparan dari "sang pedjoeang" langsung yang dimulai dengan membahas bukunya Thomas L. Friedman yang terkenal itu The World is Flat. Pemaparan ditutup dengan sesi tanya jawab yang diakhiri dengan break dan lunch. Pada saat break ini lah, saya kemudian berdiri dan mendekati podium, kemudian mengajak jabat tangan sang pedjoeang sambil memperkenalkan diri. Saya bertanya pada beliau, "apakah Anda bener2 mengurangi tidur?"  "Apakah Anda benar2 meluangkan hanya sedikit sekali waktu untuk tidur, sekitar tiga jam-an?" dan beliau menjawab dengan antusias sekali "Ya!!!". Sambil makan siang, kita berbincang dan beliau membagi tipsnya tentang "mengurangi waktu tidur". Man, body size saya dengan sang pedjoeang tidak beda jauh tipis, tapi bedanya, saya banyak sekali meluangkan waktu untuk tidur, sedangkan beliau tidak, hehehe. Makanya sangat tidak heran, prestasinya juga sangat jauh berbeda, seperti langit dan bumi. Andai prestasi bisa ditentukan oleh ukuran tubuh, secara berat badan saya adalah 9* kg, hahaha.

Terimakasih untuk Romi Satria Wahono, karena telah rela membagi rahasia suksesnya dan memberikan kesempatan berbincang-bincang yang sangat menarik sekali.

Terimakasih untuk MIFTA karena telah mengadakan sebuah acara yang sangat luar biasa sekali, acara yang sangat bermutu yang sangat menyenangkan dan penuh kekeluargaan dan kehangatan. Ditunggu undangan untuk next eventnya :-)

saya akhiri postingan OOT ini dengan sebuah kalimat yang saya dengar langsung dari sang pedjoeang yang saya copy paste dari friendster sang pedjoeang sendiri.

Aku akan tunjukkan jalan para legenda, jalan cinta yang abadi, dan inilah jalan cinta para pedjoeang :)

 

Share this post: | | | |
Posted: Dec 23 2008, 10:57 AM by go2ismail | with 5 comment(s)
Filed under:
How To Host DotNetNuke Website

Seorang teman saya menanyakan ke saya tentang bagaimana caranya nge-host DotNetNuke website kesayangannya pada sebuah "Shared Hosting Server". Kemudian saya menjanjikan pada beliau untuk menjawabnya via blog geeks ini. And.. here it is.. special for you my dear friend at GAC (www.gacworld.com) Wink

Untuk memindahkan sebuah website DotNetNuke pada sebuah "Shared Hosting Server", ada dua hal yang mesti dilakukan:

1. Memindahkan file-file Website DotNetNuke

2. Memindahkan Database yang bersangkutan

note: thanks to rudy from www.erudeye.net for your guidance on this one Wink

Berikut adalah langkah-langkah yang pernah saya alami dalam memindahkan sebuah website DotNetNuke pada sebuah "Shared Hosting Server" yang mana menggunakan jasanya temen-temen dari erudeye.

note: untuk yang ingin mecobanya, pastikan Anda sudah memiliki account di "shared hosting server"

1. Login dengan menggunakan account yang Anda miliki

 

2. Melalui HELM, buatlah account FTP yang akan digunakan nanti untuk meng-upload file-file DotNetNuke Website.

saya menggunakan FileZilla untuk mengupload file-file DotNetNuke Website yang saya Zip menjadi sebuah file saja. Kemudian, file zip tersebut saya unzip ke folder wwwroot yang telah disediakan oleh si penyedia jasa hosting.

3. Buatlah Database dan User yang bersesuaian dengan Database tersebut via HELM

4. Script Database Lokal Anda

Script Database lokal Anda. Untuk melakukan hal ini saya menggunakan tools yang disebut "Database Publishing Wizard" dapat di download di: http://www.microsoft.com/downloads/details.aspx?familyid=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

5. Running Script Database

Setelah langkah empat di lakukan. Buka SQL Server Management Studio Anda. Kemudian, dengan menggunakan SSMS Anda akseslah database yang telah di buat pada langkah tiga diatas. Dengan menggunakan script yang didapat pada langkah empat, jalankan script tersebut pada database yang telah dibuat pada langkah tiga.

selesai Smile

Share this post: | | | |
Posted: Dec 18 2008, 11:36 AM by go2ismail | with 4 comment(s)
Filed under:
Reading .resx File Using xPath

Pada artikel ini, saya akan mencoba untuk berbagi tips tentang membaca file resources (.resx) dengan menggunakan xPath. Kenapa bisa? yes,  karena sesungguhnya file resources (.resx) adalah merupakan dokumen XML dan xPath adalah bahasa yang digunakan untuk mendapatkan informasi dari dokumen XML. Informasi tentang xPath dapat di baca lebih jauh di: http://www.w3schools.com/XPath/default.asp

Beruntung untuk fans nya .NET karena .NET sudah menyediakan kelas-kelas yang dapat di gunakan secara "out of the box" sehingga doing "XML thing" dan "xPath thing" menjadi lebih mudah. Kelas-kelas yang akan saya gunakan adalah:

1. kelas XPathDocument yang merupakan "representasi" dokumen XML. Dokumen XML yang di representasikan oleh kelas XPathDocument ini menggunakan model data XPath sehingga saya bisa menggunakan kelas dibawah ini untuk mencari informasi didalamnya. Untuk informasi lebih lanjut mengenai XPathDocument dapat di baca di: http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx

2. kelas XPathNavigator merupakan sebuah kelas yang dapat digunakan untuk bernavigasi pada dokumen XML yang menggunakan model data XPath. Untuk informasi lebih lanjut mengenai XPathNavigator dapat dibaca di: http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx

Informasi lebih lengkap tentang cara memproses data XML dengan menggunakan model data XPath dapat dibaca di: http://msdn.microsoft.com/en-us/library/87274khy.aspx

action!!!

berikut adalah contoh file resources yang saya gunakan dalam POC:

 

Dan berikut adalah source code yang digunakan untuk membaca file resources diatas dengan menggunakan model data XPath

protected void Button3_Click(Object sender, EventArgs e)

{

string resourceFile = "~/App_LocalResources/ResourceTest.resx";

string resourceFilePhysical = Server.MapPath(resourceFile);

System.Xml.XPath.XPathDocument xmlDoc = new System.Xml.XPath.XPathDocument(resourceFilePhysical);

System.Collections.Hashtable hasil = new System.Collections.Hashtable();

foreach (System.Xml.XPath.XPathNavigator nav in xmlDoc.CreateNavigator().Select("root/data"))

{

if (nav.NodeType != System.Xml.XPath.XPathNodeType.Comment)

{

hasil[nav.GetAttribute(
"name", string.Empty)] = nav.SelectSingleNode("value").Value;

}

}

}

dapat dilihat di source code diatas, bagaimana XPathDocument dan XPathNavigator beraksi. Informasi yang didapatkan kemudian saya simpan di hashtable.

Share this post: | | | |
Posted: Nov 11 2008, 06:16 AM by go2ismail | with no comments
Filed under:
IIS and XAMPP (Apache) on Windows XP

Mengambil pelajaran dari seseorang yang sudah proven dan well known adalah hal yang menurut saya sangat penting. Dengan mencoba memahami rute yang telah di lalui oleh para pakar, akan menjadikan saya sebagai "new generation" menjadi sosok pribadi yang lebih berwawasan. Mempelajari, Memperbaiki dan Menyempurnakan. Hal yang sama terjadi pada teknologi yang sekarang ini sedang saya geluti yaitu web platform, web framework dan CMS. Dalam hal ini, saya mencoba untuk mengambil pelajaran dari salah satu CMS yang sudah sangat terkenal yang memiliki pengguna yang sangat banyak sekali. Yep, CMS yang saya maksud adalah Joomla yang beberapakali menjadi nominasi dan menjuarai best overall CMS. Saya merasa sangat penting untuk mencoba mencicipi Joomla dan mendapatkan "user experience". Tujuannya adalah demi memperbaiki, mengembangkan dan menyempurnakan "mainan" yang sedang saya oprek yaitu DotNetNuke.

Untuk dapat melakukan hal tersebut, saya harus bisa menginstall dan menjalankan Joomla di Windows XP saya. Beruntung saya bisa menemukan XAMPP (Apache) sehingga saya bisa dengan mudah menginstall dan mencoba-coba fitur2 Joomla.

Namun demikian, ada beberapa trik yang harus di lakukan agar XAMPP dan IIS dapat hidup berdampingan dengan damai dan harmonis. Sebelum saya menerapkan tips and trick tersebut, saya tidak dapat menjalankan XAMPP saya di Windows XP. Masalah utamanya adalah telah digunakannya port default oleh IIS. Tips and trick saya dapatkan dari Williamo's Blog. Adapun uraiannya adalah sebagai berikut: (saya menginstall XAMPP di folder C:\xampp\ )

1.   Edit file httpd.conf yang dapat di temukan di C:\xampp\apache\conf:

- ganti "Listen 80" dengan "Listen 8080"

- ganti "ServerName localhost:80" dengan "ServerName localhost:8080"

2. Edit file httpd-ssl.conf yang dapat di temukan di C:\xampp\apache\conf\extra:

- ganti "Listen 443" dengan "Listen 4499"

- ganti "VirtualHost _default_:443" dengan "VirtualHost _default_:4499"

- ganti "ServerName localhost:443" dengan "ServerName localhost:4499"

setelah kedua file diatas di edit, maka XAMPP yang saya install di Windows XP kemudian dapat berjalan dengan baik:

dan berikut adalah Joomla in action:

Share this post: | | | |
Posted: Nov 09 2008, 08:02 PM by go2ismail | with no comments
Filed under:
How to Implement SSL on DotNetNuke web site

Keamanan merupakan hal yang sangat penting dan tidak terbantahkan lagi. Pengiriman informasi penting dari client ke server dirasakan kurang aman jika menggunakan jalur HTTP. Munculah SSL yang berupaya menjadi solusi. Cerita selengkapnya mengenai SSL dapat di baca di: http://www.wisegeek.com/what-is-ssl.htm

Berangkat dari sana, maka saya akan mencoba untuk menerapkan SSL pada DotNetNuke dan coba tebak apa? yes, ternyata mudah sekali untuk menerapkan SSL di DotNetNuke :-) berikut adalah langkah-langkahnya:

 1. Miliki certificate SSL dari vendor terpercaya

yep, sebelum dapat melangkah jauh, maka harus dimiliki terlebih dahulu SSL certificate untuk diinstallkan pada server production. Karena belum mampu beli, saya menggunakan SSL certificate trial yang dikeluarkan oleh vendor terkemuka yaitu verisign. Untuk memperoleh SSL certificate versi trial dapat mengunjungi http://www.verisign.com/ssl/buy-ssl-certificates/free-ssl-certificate-trial/index.html 

setelah certificate SSL di dapatkan, maka installkan certificate tersebut pada web server. Untuk POC kali ini, saya menggunakan IIS 5.1 adapun langkah-langkah installasi certificate SSL pada IIS 5.1 bisa ditemukan di: http://www.petri.co.il/configure_ssl_on_your_website_with_iis.htm

2. Setup DotNetNuke agar SSL Enable

setelah web server ready maka tiba saatnya untuk setup di DotNetNuke, langkah-langkahnya:

- login sebagai Host, karena dengan user Host ini maka opsi SSL Settings dapat terlihat

- Masuk ke Admin > Site Settings > Advanced Settings > SSL Settings kemudian pilih SSL Enabled

- Masuk ke page yang hendak diamankan biasanya page-page untuk transaksi eCommerce. Di page tersebut masuk ke Page Settings > Advanced Settings > Other Settings dan kemudian pilih secure. And done!!! simple isn't it :-)

3. Setup Browser

karena POC kali ini pake Certificate SSL trial, maka si browser harus diinstal Test Root CA Certificate. Untuk certificate yang berbayar, hal ini tidak usah dilakukan di browser clients nanti repot ;-)  . Silahkan visit http://www.verisign.com/server/trial/faq/index.html  untuk informasi tentang how to install Test Root CA Certificate.

finish!!!

berikut adalah screenshot DNN SSL in action:

Share this post: | | | |
Posted: Nov 07 2008, 01:51 PM by go2ismail | with no comments
Filed under:
Using Gapi.NET for Google Custom Search Engine

Seorang teman memberitahukan saya bahwa di codeplex ada sebuah projek Google API yang sangat bagus. Nama projek tersebut adalah Gapi.NET yang notabene merupakan .NET wrapper (C#) untuk Google API. See the full story at: http://www.codeplex.com/GAPIdotNET

Karena malam ini lagi ngoprek Custom Google Search Engine maka saya gunakan kemampuan si Gapi.NET untuk membuat google search. Berikut adalah skenario POC nya: Saya membuat google search dengan menggunakan Gapi.NET. Google search yang saya buat hanya akan menampilkan 80 item pertama. Hasil pencarian saya tampung dalam DataTable yang kemudian saya isikan pada GridView. Dengan GridView, kita bisa meng-cutomize hasil pencarian sehingga bisa lebih ok.

Dengan menggunakan Gapi.NET, yang harus dilakukan adalah membuat handler untuk button searchnya. berikut adalah potongan source code untuk handler button search:

protected void Zoeken_Click(object sender, EventArgs e)

{

DataTable dt = new DataTable("Table");

dt.Columns.Add("Title");

dt.Columns.Add("Content");

dt.Columns.Add("URL");for (int j = 0; j < 10; j++)

{

Gapi.Search.SearchResults srs = Gapi.Search.Searcher.Search(Gapi.Search.SearchType.Web, TextBox1.Text, j);

Gapi.Search.SearchResult[] arrHasil = srs.Items;for (Int32 i = 0; i < arrHasil.Length; i++)

{

dt.Rows.Add(arrHasilIdea.Title, arrHasilIdea.Content, arrHasilIdea.Url);

}

}

 

GridView1.DataSource = dt.DefaultView;

GridView1.DataBind();

 

 

}

 

Gapi.NET in action:

Share this post: | | | |
Posted: Nov 06 2008, 10:07 PM by go2ismail | with 2 comment(s)
Filed under:
Implementing Google Custom Search Engine on ASP.NET

Google memiliki layanan yang disebut Google Custom Search Engine. Dengan layanan ini maka dimungkinkan untuk memiliki “search engine” yang sesuai dengan kebutuhan, plus memiliki ketangguhan yang dimiliki oleh google. Untuk informasi lebih lengkap silahkan baca di http://www.google.com/coop/cse/

 

Pertanyaan yang muncul adalah, bagaimana implementasi Google Custom Search di halaman ASP.NET ? just stick with this article J

 

Ada banyak cara untuk menampilkan google custom search engine di halaman web site, bahkan google sendiri membuat langkah2 yang sudah sangat jelas. Namun demikian langkah berikut adalah langkah yang saya ambil dikarenakan pendekatan yang dilakukan cocok dengan kebutuhan saya saat ini yaitu membuat pluggable module. Ok, berikut adalah yang saya lakukan:

 

1. Membuat Account di Google Custom Search Engine 

 

Sebagai langkah awal yang harus dilakukan adalah medaftar di google custom search engine dan kemudian dapatkan code untuk menampilkan search results. Ada beberapa opsi yang ditawarkan untuk menampilkan hasil pencarian. Saya memilih opsi untuk menampilkan search result di website saya sendiri alih-alih menampilkannya di halaman google.

 

 

2. Membuat Search Box dan Result Box

 

Tidak akan sempurna sebuah halaman search tanpa adanya search box dan result box J jadi langkah berikutnya adalah mempersiapkan keduanya. Saya menjadikan search box dan result box dalam satu halaman yang sama. Karena akan di tampilkan dalam satu halaman, search box dan result box saya simpan dalam dua buah tag <div> yang berbeda. Div “cse-search-box” digunakan untuk menampilkan kotak search dan tombolnya. Div “cse-search-results” saya gunakan untuk menampilkan search results.

   

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Untitled Page</title> </head>

<body>

<form id="form1" runat="server">

<div>

<div id="cse-search-box">

<asp:TextBox ID="txtSearch" runat="server" />

<asp:Button runat="server" Text="Search" OnClientClick="SearchSite(); return false;"

UseSubmitBehavior="false" />

</div>

<!-- untuk menampilkan search results -->

<div id="cse-search-results">

</div>

</div>

</form> </body>

</html>

Note: div “cse-search-results” akan diisi secara dynamic oleh google.

 

3. Javascripts Untuk Menampilkan Search Results

 

Langkah terakhir adalah membuat javascript untuk menampilkan search results. Javascript tersebut akan dipanggil ketika button search di klik. Javascript akan memanggil halaman yang digunakan untuk menampung search result. URL pemanggilan dilengkapi dengan query string yang informasinya diperoleh dari google custom search engine. Query string cx, cof, ie dan sa isinya dapat diperoleh dari source code google custom search engine. Sedangkan query string q, isinya diperoleh dari kotak search.

 

<script type="text/javascript">

// Function retrieved from: http://cass- hacks.com/articles/code/js_url_encode_decode/

function URLEncode (clearString)

{

var output = '';var x = 0;

clearString = clearString.toString();

var regex = /(^[a-zA-Z0-9_.]*)/;

while (x < clearString.length)

{

var match = regex.exec(clearString.substr(x));if (match != null && match.length > 1 && match[1] != '')

{

output += match[1];

x += match[1].length;

}

else

{

if (clearString[x] == ' ') output += '+';

else

{

var charCode = clearString.charCodeAt(x);

var hexVal = charCode.toString(16);

output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();

}

x++;

}

}

return (output);

}

 

 

function SearchSite()

{

document.location.href=
'http://localhost:2360/cse/Default.aspx?cx=002881578700962372446%3Asuquqtzdcas&cof=FORID%3A9&ie=UTF-8&q=' + URLEncode(document.getElementById('<%=txtSearch.ClientID%>').value) + '&sa=Search';

 

}

var googleSearchIframeName = "cse-search-results";

var googleSearchFormName = "cse-search-box";

var googleSearchFrameWidth = 600; var googleSearchDomain = "www.google.com";

var googleSearchPath = "/cse";

</script>

<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>

 

Note: tanda titik dua pada value query string diganti dengan “%3A”.

 

That’s it. Dibawah adalah google custom search engine in action.

 

 

 

Share this post: | | | |
Posted: Nov 06 2008, 09:42 PM by go2ismail | with no comments
Filed under:
Calling Sybase Stored Procedure From DAL

Memanggil stored procedure MS SQL dari DAL merupakan hal yang biasa dan banyak sekali dijumpai contoh-contohnya. Namun memanggil stored procedure Sybase cukup agak tricky, setidaknya untuk saya pribadi. Pada awalnya saya berfikir memanggil Stored Procedure pasti polanya sama aja untuk database manapun tapi ternyata tidak. Untuk lebih meresapi apa yang telah saya tulis diatas mari disimak potongan source code di bawah ini:

public void ADD(GAC_OFFICES_BO obj)

{

DbCommand cmd = DB.GetStoredProcCommand("{call SP_GAC_OFFICES_ADD(?, ?, ?, ?, ?, ?, ?, ?)}");

DB.AddInParameter(cmd, "OFFICE_CODE", DbType.String, obj.OFFICE_CODE);

DB.AddInParameter(cmd, "OFFICE_NAME", DbType.String, obj.OFFICE_NAME);

DB.AddInParameter(cmd, "MODE", DbType.String, obj.MODE);

DB.AddInParameter(cmd, "ACTIVE_FLAG", DbType.String, obj.ACTIVE_FLAG);

DB.AddInParameter(cmd, "CREATED_BY", DbType.String, obj.CREATED_BY);

DB.AddInParameter(cmd, "CREATED_DATE", DbType.DateTime, obj.CREATED_DATE);

DB.AddInParameter(cmd, "UPDATED_BY", DbType.String, obj.UPDATED_BY);

DB.AddInParameter(cmd, "UPDATED_DATE", DbType.DateTime, obj.UPDATED_DATE);

DB.ExecuteNonQuery(cmd);

}

Diatas adalah sebuah method yang berguna untuk menambahkan data ke database. Method tersebut memanggil sebuah stored procedure yang bernama SP_GAC_OFFICES_ADD dengan inputan parameter sebanyak delapan buah. Dapat dilihat, Stored Procedure dipanggil dengan cara menggunakan kurung kurawal, kata "call", nama Stored Procedure dan kemudian simbol tanda tanya. Banyak simbol tanda tanya yang digunakan adalah sejumlah parameter dari stored procedure yang bersangkutan.

Cara menambahkan parameter hanya memiliki sedikit perbedaan yaitu tidak digunakannya simbol "a keong (@)" didepan nama parameter.

buat saya, perbedaan ini telah membuat saya sedikit "headache" ketika membuat POC dan sebagai kenang-kenangan maka saya tuliskan di blog ini :-)

note:

Objek DB adalah objek dari kelas

Microsoft.Practices.EnterpriseLibrary.Data.Database 

Share this post: | | | |
Posted: Apr 30 2008, 09:23 AM by go2ismail | with 1 comment(s) |
Filed under:
IGW816: Exceptional Experience

like the title said, "IGW816: Exceptional Experience"

different people from different country working together for one goal :-)

Stewart Herbert

Eva Navratil Freitag

Ilias Avramidis

Kanagarajan

Ashan B. Silva

thank you for everything

good bye "Spicy Spirit of 6" smile.... :-)

Share this post: | | | |
Posted: Apr 23 2008, 05:39 PM by go2ismail | with no comments
Filed under:
Custom RoleProvider

Meneruskan artikel sebelumnya tentang custom membership provider, maka kali ini saya akan coba tuliskan sekilas tentang custom role provider. Implementasi dari custom role provider kurang lebih sama dengan implementasi custom membership provider yaitu melalui tiga langkah mudah yaitu: membuat kelas turunan, meng-override method dan terakhir adalah konfigurasi web.config.

1. Membuat kelas turunan

untuk custom role provider ini, kelas yang akan dibuat diturunkan dari kelas RoleProvider.

namespace Provider

{

public class SybaseRoleProvider : RoleProvider

{

}

}

note: penamaan kelas turunan adalah bebas, saya menggunakan "Sybase" karena client menginginkan saya meng-custom role and membership dengan menggunakan Sybase sebagai beck-end. Awalan "Sybase" akan mengingatkan bahwa beck-end yang hendak digunakan adalah Sybase.

2. Meng-override method GetRolesForUser

Method GetRolesForUser akan mengambil roles dari seorang user dengan menggunakan informasi username yang diinputkan. Isi dari method ini adalah akses ke database yang akan mengembalikan nama-nama roles yang dimiliki oleh seorang user berdasarkan username nya.

public override string[] GetRolesForUser(string username)

{

 

 

}

keluaran dari method GetRolesForUser adalah array string yaitu nama-nama roles yang dimilki oleh user tertentu.

3. Konfigurasi web.config

langkah terakhir adalah konfigurasi web.config

<roleManager enabled="true" defaultProvider="Provider.SybaseRoleProvider">

<providers>

<clear/>

<add applicationName="/" connectionStringName="ConnectionString" name="Provider.SybaseRoleProvider" type="Provider.SybaseRoleProvider"/>

</providers>

</roleManager>

and finish :-)

HTH

Share this post: | | | |
Posted: Apr 10 2008, 12:25 PM by go2ismail | with 5 comment(s)
Filed under:
Custom MembershipProvider

Custom MembershipProvider diperlukan ketika aplikasi yang dikembangkan akan tidak menggunakan default provider untuk membership. Default provider yang digunakan adalah SqlMembershipProvider. Adapun pembuatan custom MembershipProvider sangat sederhana yaitu cukup meng-override method ValidateUser dari kelas MembershipProvider. Berikut adalah tiga langkah mudah pembuatan custom MembershipProvider:

1. Membuat sebuah kelas yang diturunkan dari kelas MembershipProvider

Membuat custom MembershipProvider berarti membuat sebuah kelas baru yang diturunkan dari kelas MembershipProvider.

namespace Provider

public class MyCustomMembershipProvider : MembershipProvider

public override bool ValidateUser(string username, string password)

{

// code untuk validasi user goes here

}

}

}

2. Meng-override method ValidateUser

Setelah kerangka kelas dibuat, langkah berikutnya adalah mengisikan code untuk mengoverride method ValidateUser. note: method lainnya dapat dioverride sesuai kebutuhan sehingga tidak harus semua method dari kelas MembershipProvider di override.

public override bool ValidateUser(string username, string password)

{

 

USERS_BO user = new USERS_BO();

user = USERS_MGR.GETUSERSBYNAME(username);

if (user != null)

{

if (user.PASSWORD != null)

{

string dbPassword = user.PASSWORD;

bool status = dbPassword.Equals(password);

return status;

}

else

{

return false;

}

}

else

{

return false;

}

 

 

}

isi code diatas sangat sederhana, yaitu membandingkan password yang dimasukan oleh user di login screen dengan password yang sudah disimpan didalam database untuk user tertentu (yang diindikasikan melalui username).

3. Konfigurasi di web.config

and the last step nya adalah melakukan sedikit konfigurasi di web.config. Konfigurasi dilakukan agar aplikasi kita mengenali dan kemudian menggunakan custom MembershipProvider yang telah dibuat. adapun konfigurasi yang dilakukan adalah cukup menambahkan code seperti berikut:

<membership defaultProvider="Provider.MyCustomMembershipProvider">

<providers>

<clear/>

<add name="Provider.MyCustomMembershipProvider" type="Provider.MyCustomMembershipProvider" applicationName="/" connectionStringName="ConnectionString"/>

</providers>

</membership>

Dapat dilihat, konfigurasi yang dilakukan adalah "memperkenalkan" custom MembershipProvider pada aplikasi dengan cara menuliskan nama kelas si custom MembershipProvider yang diawali dengan nama namespacenya.

done :-)

Share this post: | | | |
Posted: Mar 26 2008, 03:04 PM by go2ismail | with 2 comment(s)
Filed under:
More Posts Next page »