Ahmad Masykur

Share your knowledge although one function!

About the author

Ahmad Masykur is a Software Architecture Engineer at PT. Freeport Indonesia Jakarta Indonesia.
In this blog, I share things of interest to me. Most topics are likely to be related to software development, but don't hold me to it.

Certificates



Awards


Powered by

Widget Prayer Time not found.

There is an error in XML document (4, 16278).X

Page List

Validators


Ahmad Masykur

Mengkombinasikan Silverlight dengan HTML

Silverlight memang sangat tangguh untuk menampilkan antar muka pengguna (user interface) yang interaktif dan menarik. Pada silverlight 1.0 fasilitas yang tersedia masih sangat terbatas, hanya dapat digunakan untuk menggambar vektor, animasi dan multimedia. Pada Silverlight 1.0 belum dikenal istilah kontrol termasuk kontrol sederhana seperti input textbox, combobox, dll. Pada Silverlight 2.0 baru akan ada kontrol baik yang out of the box telah tersedia maupun kontrol yang dibuat sendiri.

Permasalahan saat ini adalah kontrol HTML (contoh: Ajax Control Toolkit, Rich Text Editor, dll) jumlahnya sangat banyak dan tidak mungkin semua diubah menjadi kontrol Silverlight. Satu lagi permasalahan adalah jika menggunakan kontrol Silverlight 2.0, kesulitannya adalah mengkomunikasikan antara code-behind C# dengan Javascript.

Untuk memenuhi keterbatasan ini, dapat digunakan kombinasi antara Silverlight dan kontrol HTML yang sudah ada. Dengan mengkombinasikan keduanya, tidak perlu lagi mengubah semua kontrol yang sudah stabil di HTML menjadi objek Silverlight.

Penggabungan antara HTML dan Silverlight diperlukan pengaturan atribut isWindowless: 'true' pada waktu create object Silverlight. Jika isWindowless: 'false' maka kontrol HTML akan selalu berada di bawah Silverlight.

createSilverlight = function()
{
    var scene = new LayeredPage();
    Silverlight.createObjectEx({
        source: 'scene.xaml',
        parentElement: document.getElementById('SilverlightPlugInHost'),
        id: 'SilverlightPlugIn',
        properties: {
            width: '800',
            height: '600',
            background: 'transparent',
            isWindowless: 'true',
            version: '1.0',
            framerate: "25"
        },
        events: {
            onError: null,
            onLoad: Silverlight.createDelegate(scene, scene.handleLoad),
        },       
        context: null
    });

}

Dengan mengeset isWindowsless menjadi 'true' ada sesuatu yang harus dibayar yaitu tiap ada perubahan, semua element XAML akan dirender ulang. Jika isWindowless diset 'false', hanya elemen yang berubah saja yang akan dirender. Jika elemen tidak terlalu banyak animasi, hal tersebut bukan masalah. Jika banyak animasi, performance dapat ditingkatkan dengan menurunkan framerate dari default-nya 60pfs menjadi 25-30fps.


Categories: Silverlight
Permalink | Comments (1) | Post RSSRSS comment feed

JSON vs XML

JSON (JavaScript Object Notation) merupakan format pertukaran data berdasarkan notasi JavaScript. Dari beberapa sumber mengatakan bahwa JSON lebih baik dari XML sebagai format pertukaran data. Benarkah demikian? Saya coba untuk membuat test sedarhana membandingkan kedua format data tersebut pada ASP.NET WebService.

Saya menggunakan dua parameter pembanding yaitu besar stream yang ditransmisikan dan response time. Untuk menganalisis kinerja keduanya saya gunakan tool buatan Nikhil Kotari yaitu Web Development Helper yang dapat di download dari situs pribadinya di Nikhil Kothari's Projects - Web Development Helper

Pertama saya buat sebuat object Employee dengan data EmpId, Name, Sex dan Title. object ini yang akan diserialisasi ke JSON dan XML sebagai return value WebService.

namespace JSONSample
{
    public class Employee
    {
        public string EmpId { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public char Sex { get; set; }
    }
}

Selanjutnya buat web service dengan dua method yang mengembalikan Employee dalam format JSON dan XML. Jangan lupa untuk menambahkan namespace System.Web.Script.Services dan class attribute [ScriptService]

using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Web.Script.Services;

namespace JSONSample
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [WebService(Namespace = "">http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    [ScriptService]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    // [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public Employee GetEmployee(string EmpId)
        {
            var emp = new Employee();
            emp.EmpId = EmpId;
            emp.Name = "Ahmad Masykur";
            emp.Sex = 'M';
            emp.Title = "Analyst, Application Architecture";
            return emp;
        }
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public Employee GetEmployeeJSON(string EmpId)
        {
            var emp = new Employee();
            emp.EmpId = EmpId;
            emp.Name = "Ahmad Masykur";
            emp.Sex = 'M';
            emp.Title = "Analyst, Application Architecture";
            return emp;
        }
    }
}

Berikutnya adalah buat kode javascript untuk memanggil memanggil kedua method pada WebService yang telah dibuat sebelumnya.

var displayElement1;
var displayElement2;

// Initializes global variables and session state.
function pageLoad()
{
    displayElement1 = $get("ResultId1");
    displayElement2 = $get("ResultId2");
}
function getEmployee() {
    JSONSample.WebService1.GetEmployee("894683", OnSucceeded, OnFailed);
    JSONSample.WebService1.GetEmployeeJSON("894683", OnSucceeded, OnFailed);
}

// Callback function invoked on successful
// completion of the page method.
function OnSucceeded(result, userContext, methodName)
{
    if (methodName=="GetEmployee") { // xml
        displayElement1.innerHTML = result.documentElement.selectSingleNode('//Name').text;
    }
    else { // json
        displayElement2.innerHTML = result.Name;
    }
}

// Callback function invoked on failure
// of the page method.
function OnFailed(error, userContext, methodName)
{
    if(error !== null)
    {
        displayElement.innerHTML = "An error occurred: " +
            error.get_message();
    }
}

if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

Terakhir buat halaman ASP.NET AJAX yang akan meregister JavaScript dan WebService sehingga WebService dapat dipanggil melalui JavaScript oleh ASP.NET AJAX proxy service.


<%@ Page Language="C#" AutoEventWireup="true" Inherits="System.Web.UI.Page" %> <!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>        <asp:ScriptManager ID="ScriptManager1" runat="server">        <Scripts>            <asp:ScriptReference Path="~/clientscript.js" />        </Scripts>        <Services>            <asp:ServiceReference Path="~/WebService1.asmx" />        </Services>        </asp:ScriptManager>           <input type="button" value="Invoke" onclick="getEmployee()" />        <div id="ResultId1"></div>        <div id="ResultId2"></div>    </div>    </form></body></html>

Setelah dijalankan, aktifkan Web Development Helper dan check Enable Logging. Selanjutnya klik tombol Invoke tiga kali pada halaman dan periksa hasilnya.

image

Dari hasil keluaran log dapat dilihat bahwa dengan data yang sama, format XML memerlukan 226 byte sedangkan JSON hanya 132 byte. Ini jauh lebih kecil (kurang dari setengah) dibandingkan XML. Dari sisi response time, pada invoke yang pertama XML membutuhkan waktu 0:0:3430 sedangkan JSON 0:0:3280 dan invoke berikutnya untuk XML 0:0:0150 sedangkan JSON 0:0:0000. Dari data ini membuktikan bahwa JSON memang lebih ringan dibandingkan XML baik dari sisi ukuran stream yang ditransmisikan lebih kecil maupun waktu proses di server juga lebih singkat.


Tags: ,
Categories: ASP.NET AJAX | JavaScript | JSON
Permalink | Comments (15) | Post RSSRSS comment feed

Masalah ASP.NET pada Oracle 9i: Unable To Load oci.dll

Salah satu masalah ketika membuat aplikasi ASP.NET 2.0 dengan database Oracle 9i adalah instance ASP.NET tidak bisa mengakses driver oracle client (oci.dll). Ini terjadi karena instance ASP.NET tidak memiliki hak akses execute ke file oci.dll yang berada di folder instalasi Oracle Client.

Solusinya dari permasalahan ini cukup mudah. Cari folder tempat file oci.dll berada dan berikan hak akses read & execute pada folder tersebut. Klik tombol [Adcanced] dan centang pilihan "Replace permission entries on all child objects with entries shown here that apply to child objects."

Buka kembali halaman ASP.NET, semoga berhasil.


Categories: ASP.NET
Permalink | Comments (8) | Post RSSRSS comment feed